绘图功能是 OpenCV 最基础的功能,OpenCV 提供了基础的绘制函数,用于帮助我们绘制一些基本的图形。通过这些函数的组合,我们也可以做一些高级的应用。
OpenCV 的绘制函数相对简单,而且很多参数很类似,所以介绍第一个函数时会详细地介绍各个参数的含义,后面就不做特别详细的介绍了。
我们先来看点和圆的绘制:
- #include
- #include
- #include
-
- using namespace std;
- using namespace cv;
-
- int main(int argc,char *argv[])
- {
- Mat image = Mat::zeros(Size(800, 800), CV_8UC3);
- image.setTo(255);// 设置屏幕为白色
-
- Point p1(100, 100);
- Point p2(200, 200);
- Point p3(300, 300);
- Point p4(400, 400);
- Point p5(500, 500);
- Point p6(600, 600);
- Point p7(700, 700);
-
- circle(image, p1, 4, Scalar(0, 0, 255), -1); // 画半径为4的圆(画点)
-
- circle(image, p2, 60, Scalar(255, 0, 0), 2); // 画半径为60的圆
-
- circle(image, p3, 60, Scalar(0, 255, 0), -1);
-
- circle(image, p4, 60, Scalar(255, 255, 0), 5);
-
- circle(image, p5, 60, Scalar(255, 0, 255), -1);
-
- circle(image, p6, 60, Scalar(0, 255, 255), 2);
-
- circle(image, p7, 60, Scalar(0, 0, 0), -1);
-
- imshow("src", image);
-
- waitKey(0);
- return 0;
- }
我们主要使用 circle() 函数来绘制点和圆。
- CV_EXPORTS_W void circle(InputOutputArray img, Point center, int radius,
- const Scalar& color, int thickness = 1,
- int lineType = LINE_8, int shift = 0);
其各个参数的含义:
第一个参数 img:输入的源图像。 第二个参数 center:圆心的坐标。 第三个参数 radius:圆的半径。 第四个参数 color:圆形的颜色。 第五个参数 thickness:如果是正数,表示组成圆的线条的粗细程度。如果是负数,表示圆被填充。 第六个参数 lineType:线条的类型。OpenCV 提供了三种类型的线条,它们都是 LineTypes 枚举类型。
LINE_4 :4,表示四连接线。
LINE_8 :8,表示八连接线。
LINE_AA :16,表示抗锯齿线。使用它会产生更好的绘图质量,图像看起来会非常平滑,但是绘制速度较慢。
第七个参数 shift:圆心坐标点和半径值的小数点位数。
这里很多的参数,在本文后续的函数中都会用到。
直线跟圆的区别是,直线需要2个点来确定位置。下面是绘制直线的例子:
- #include
- #include
- #include
-
- using namespace std;
- using namespace cv;
-
- int main(int argc,char *argv[])
- {
- Mat image = Mat::zeros(Size(800, 800), CV_8UC3);
- image.setTo(255);// 设置屏幕为白色
-
- Point