08_Opencv绘制形状和文字
08_Opencv绘制形状和文字
一.cv::Point与cv::Scalar
-
Point表示2D平面上的一个点(x, y)
Point p; p.x = 11; p.y = 14;
或者
Point p = Point(11, 14);
-
Scalar表示四个元素的向量
Scalar(a, b, c, d)//a = blue, b = green, c = red, d = alpha
二.绘制线、矩形、圆、椭圆、多边形
-
绘制线:cv::line
- 第一个参数:表示绘制的目标图像的Mat对象
- 第二个参数:表示绘制的起点坐标的Point对象
- 第三个参数:表示绘制的终点坐标的Point对象
- 第四个参数:表示绘制线的颜色的Scalar对象
- 第五个参数:表示线的宽度
- 第六个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
Mat src(400, 400, CV_8UC3, Scalar(0, 0, 0)); Point p1 = Point(100, 100); Point p2 = Point(300, 300); line(src, p1, p2, Scalar(255, 0, 0), 1, LINE_8); imshow("src image", src);
-
绘制椭圆:cv::ellipse
- 第一个参数:表示背景图像的Mat对象
- 第二个参数:表示椭圆中心点的Point对象
- 第三个参数:表示椭圆半径的Size对象,如Size(src.cols/4, src.rows/8)
- 第四个参数:表示椭圆沿椭圆中心点的顺时针方向旋转的角度
- 第五个参数:表示椭圆弧长绘制的开始角度
- 第六个参数:表示椭圆弧长绘制的结束角度
- 第七个参数:表示绘制线的颜色的Scalar对象
- 第八个参数:表示线的宽度
- 第九个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
Mat src(400, 400, CV_8UC3, Scalar(0, 0, 0)); ellipse(src, Point(src.cols/2, src.rows/2), Size(src.cols/4, src.rows/8), 90, 0, 360, Scalar(255, 0, 0), 1, LINE_8); ellipse(src, Point(src.cols/2, src.rows/2), Size(src.cols/4, src.rows/8), 0, 0, 360, Scalar(255, 0, 0), 1, LINE_8); ellipse(src, Point(src.cols/2, src.rows/2), Size(src.cols/4, src.rows/8), 90, 0, 180, Scalar(0, 0, 255), 1, LINE_8); imshow("src image", src);
-
绘制矩形:cv::rectange
- 第一个参数:表示背景图像(画布)的Mat对象
- 第二个参数:表示矩形范围Rect对象,Rect对象的第一个参数表示矩形左上角顶点的x坐标,第二个参数表示矩形左上角顶点的y坐标,第三个参数表示矩形的宽度,第四个参数表示矩形的高度
- 第三个参数:表示绘制线的颜色的Scalar对象
- 第四个参数:表示线的宽度
- 第五个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
Mat src(400, 400, CV_8UC3, Scalar(0, 0, 0)); rectangle(src, Rect(src.cols/2 - 150, src.rows/2 - 150, 300, 300), Scalar(255, 0, 0), 1, LINE_8); imshow("src image", src);
-
绘制圆:cv::circle
- 第一个参数:表示背景图像(画布)的Mat对象
- 第二个参数:表示圆心坐标的Point对象
- 第三个参数:表示圆的半径
- 第四个参数:表示绘制线的颜色的Scalar对象
- 第五个参数:表示线的宽度
- 第六个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
Mat src(400, 400, CV_8UC3, Scalar(0, 0, 0)); circle(src, Point(src.cols/2, src.rows/2), 150, Scalar(255, 0, 0), 1, LINE_8); imshow("src image", src);
-
绘制填充多边形:cv::fillPoly
- 第一个参数:表示背景图像(画布)的Mat对象
- 第二个参数:表示要绘制的轮廓的点的Point的二级指针,有二维数组初始化
- 第三个参数:表示对于轮廓需要绘制的点的个数,为一位数组或者一级指针
- 第四个参数:绘制的轮廓数
- 第五个参数:表示绘制线的颜色的Scalar对象
- 第六个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
Mat src(400, 400, CV_8UC3, Scalar(0, 0, 0)); Point pts[2][4]; pts[0][0] = Point(50, 50); pts[0][1] = Point(350, 50); pts[0][2] = Point(350, 350); pts[0][3] = Point(50, 350); pts[1][0] = Point(100, 100); pts[1][1] = Point(300, 100); pts[1][2] = Point(300, 300); pts[1][3] = Point(100, 300); const Point* ppts[] = {pts[0], pts[1]}; const int npts[] = { 4, 4 }; int ncoutours = 2; fillPoly(src, ppts, npts, ncoutours, Scalar(255, 0, 0), LINE_8); imshow("src image", src);
三.绘制文字:cv::putText
-
第一个参数:表示背景图像(画布)的Mat对象
-
第二个参数:表示要绘制的文字内容
-
第三个参数:绘制文字的位置坐标的Point对象
-
第四个参数:待绘制文字的字体
-
第五个参数:待绘制文字的缩放比例
-
第六个参数:表示绘制线的颜色的Scalar对象
-
第七个参数:表示线的宽度
-
第八个参数:表示线的类型(LINE_4\LINE_8\LINE_AA)
Mat src(400, 400, CV_8UC3, Scalar(0, 0, 0)); putText(src, text, Point(src.cols/2 - 60, src.rows/2 - 20), CV_FONT_HERSHEY_COMPLEX, 1.0, Scalar(0, 0 ,255), 2, LINE_8); imshow("src image", src);