【OpenCV • c++】基础图像的绘制

简介: 【OpenCV • c++】基础图像的绘制

一、点


  在opencv中,通常使用Point类数据结构来表示二维坐标系下的点。下面演示定义一个x轴坐标为 10,y轴坐标为 8 的二维点。

Point p;
  p.x = 10;
  p.y = 8;
Point p = Point(10,


二、直线


  在opencv中,可以使用line()函数来绘画直线。

  void cv::line( InputOutputArray img, Point pt1, Point pt2, const Scalar & color, int thickness = 1, int lineType = LINE_8,  int shift = 0)

 其中第一个参数表示目标图像,第二个参数表示线段的第一个点,第三个参数表示线段的第二个点,第四个参数表示线段颜色,第五个参数表示线的粗细,第六个参数表示线的类型,第七个参数表示点坐标中的小数位数。


参考代码


#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
  Mat Image = Mat::zeros(500, 500, CV_8UC3);
  Point p1 = Point(10, 10);
  Point p2 = Point(490, 490);
  Scalar color = Scalar(0, 255, 255);
  line(Image, p1, p2, color, 1, LINE_4);
  imshow("效果图", Image);
  waitKey(0);
  return 0;
}

78c4e83601dcc6ce803030901508d7f8_a35988deca9e4285968dacc7ea208b9c.png


三、椭圆


  在opencv中,可以使用ellipse()函数来绘画椭圆。

void cv::ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, const Scalar & color, int thickness = 1, int lineType = LINE_8, int shift = 0)

 其中第一个参数表示目标图片,第二个参数表示椭圆的中心,第三个参数表示椭圆主轴大小的一半,第四个参数表示以度为单位的椭圆旋转角度,第五个参数表示椭圆弧的起始角度,以度为单位,第六个参数表示椭圆弧的结束角度,以度为单位,第七个参数表示椭圆颜色,第八个参数表示椭圆弧轮廓的厚度,第九个参数表示椭圆边界的类型,第十个参数表示中心坐标和轴值中的小数位数。


参考代码


#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
  Mat Image = Mat::zeros(500, 500, CV_8UC3);
  RotatedRect rrt;
  rrt.center = Point(200, 200);
  rrt.size = Size(100, 200);
  rrt.angle = 90.0;
  Scalar color = Scalar(0, 255, 255);
  ellipse(Image, rrt, color, 2, 8);
  imshow("效果图", Image);
  waitKey(0);
  return 0;
}

8ab7ed4d35d64d56000876ed3ef82d9e_d856e6fe9cdf45aeaa4a74325fa92b63.png


四、矩形


  在opencv中,可以使用rectangle ()函数来绘画矩形。

void cv::rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar & color, int thickness = 1, int lineType = LINE_8, int shift = 0)

 其中第一个参数表示目标图片,第二个参数表示矩形的顶点,第三个参数表示与第二个参数相对的矩形的顶点,第四个参数表示矩形颜色或亮度(灰度图像),第五个参数表示构成矩形的线条的粗细。负值,如FILLED,意味着该函数必须绘制一个填充的矩形,第六个参数表示线的类型,第七个参数表示点坐标中的小数位数。


参考代码


#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
  Mat Image = Mat::zeros(500, 500, CV_8UC3);
  Scalar color = Scalar(0, 255, 255);
  Rect rect;
  rect.x = 100;
  rect.y = 100;
  rect.width = 250;
  rect.height = 300;
  rectangle(Image, rect, color, -1, 8, 0);
  imshow("效果图", Image);
  waitKey(0);
  return 0;
}

7ac54f75847b29c21fbad8414a9360cb_2e0f7fcb3e6548199d2ddd97f56f3c1a.png


五、圆


void cv::circle(InputOutputArray img, Point center, int radius, const Scalar & color, int thickness = 1, int lineType = LINE_8, int shift = 0)

 其中第一个参数表示目标图片,第二个参数表示圆的中心,第三个参数表示圆的半径,第四个参数表示圆的颜色,第五个参数表示圆形轮廓的粗细(如果为正)。负值,如FILLED,表示要绘制一个实心圆,第六个参数表示圆边界的类型,第七个参数表示中心坐标和半径值中的小数位数。


参考代码


#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
  Mat Image = Mat::zeros(500, 500, CV_8UC3);
  Scalar color = Scalar(0, 255, 255);
  circle(Image, Point(250, 250), 105, color, -1, LINE_AA, 0);
  imshow("效果图", Image);
  waitKey(0);
  return 0;
}

423da3413c3a85225b49280cac21baf0_22b7d9c0de2449d780a011107f9ee326.png


六、多边形


void cv::fillPoly(InputOutputArray img, InputArrayOfArrays pts, const Scalar & color, int lineType = LINE_8, int shift = 0, Point offset = Point())

 其中第一个参数表示目标图片,第二个参数表示多边形数组,其中每个多边形都表示为点数组,第三个参数表示多边形颜色,第四个参数表示多边形边界的类型,第五个参数表示顶点坐标中的小数位数,第六个参数表示轮廓所有点的可选偏移。


参考代码


#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
  Mat Image = Mat::zeros(500, 500, CV_8UC3);
  Scalar color = Scalar(0, 255, 255);
  Point p1(100, 100);
  Point p2(350, 100);
  Point p3(450, 280);
  Point p4(320, 450);
  Point p5(100, 400);
  std::vector<Point> pts;
  pts.push_back(p1);
  pts.push_back(p2);
  pts.push_back(p3);
  pts.push_back(p4);
  pts.push_back(p5);
  fillPoly(Image, pts, color, 8, 0);
  imshow("效果图", Image);
  waitKey(0);
  return 0;
}

6e703b27bb73b3e5ac858fed7fce4fa2_74fdc64f051f47e3a6d8584a15284764.png


相关文章
|
1月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
34 4
|
12天前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
4月前
|
算法 开发工具 计算机视觉
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
67 1
|
26天前
|
存储 计算机视觉 C++
在C++中实现Armadillo库与OpenCV库之间的数据格式转换
在C++中实现Armadillo库与OpenCV库之间的数据格式转换是一项常见且实用的技能。上述步骤提供了一种标准的方法来进行这种转换,可以帮助开发者在两个库之间高效地转移和处理数据。虽然转换过程相对直接,但开发者应留意数据类型匹配和性能优化等关键细节。
29 11
|
2月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
27天前
|
存储 计算机视觉 C++
在C++中实现Armadillo库与OpenCV库之间的数据格式转换
在C++中实现Armadillo库与OpenCV库之间的数据格式转换是一项常见且实用的技能。上述步骤提供了一种标准的方法来进行这种转换,可以帮助开发者在两个库之间高效地转移和处理数据。虽然转换过程相对直接,但开发者应留意数据类型匹配和性能优化等关键细节。
18 3
WK
|
2月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
75 1
|
2月前
|
传感器 定位技术 C++
基于C++的GDAL用空白栅格填充长时间序列遥感影像中的缺失图像
然后,定义需要处理的遥感影像路径列表,和识别数据缺失的逻辑。这里我们简化处理,假设已经知道哪一幅图像是缺失的,因此直接跳过识别步骤。
33 1
|
4月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
114 1
|
4月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
60 1