Part11. 绘制简单的图形
绘图功能是 OpenCV 最基础的功能,OpenCV 提供了基础的绘制函数,用于帮助我们绘制一些基本的图形。通过这些函数的组合,我们也可以做一些高级的应用。
11.1 绘制点和圆
OpenCV 的绘制函数相对简单,而且很多参数很类似,所以介绍第一个函数时会详细地介绍各个参数的含义,后面就不做特别详细的介绍了。
我们先来看点和圆的绘制:
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
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:圆心坐标点和半径值的小数点位数。
这里很多的参数,在本文后续的函数中都会用到。
21.2 绘制直线
直线跟圆的区别是,直线需要2个点来确定位置。下面是绘制直线的例子:
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
int main(int argc,char *argv[])
{
Mat image = Mat::zeros(Size(800, 800), CV_8UC3);
image.setTo(255);// 设置屏幕为白色
Poin