直线、矩形、圆、椭圆、文字等绘制
详细见代码:
#include<opencv2/opencv.hpp> #include<iostream> using namespace cv; Mat bgImage; const char*drawdemo_win = "draw shapes and text demo"; //注意调用函数,在main函数前声明函数。 void MyLines(); void MyRectangle(); void MyEllipse(); void MyCircle(); void MyPolygon(); int main(int argc, char** argv) { bgImage = imread("L:/4.jpg"); if (!bgImage.data) { printf("could not load image...\n"); return -1; } MyLines(); //call MyLine()函数 MyRectangle(); //call MyRectangle()函数 MyEllipse(); //call MyEllipse()函数 MyCircle(); //call MyCircle()函数 MyPolygon(); //call MyPolygon()函数 //图片上绘制文字 putText(bgImage,"Hello Opencv",Point(300,300),CV_FONT_HERSHEY_COMPLEX,1.0,Scalar(12,23,200),3,8); //参数:1.目标图像 2.内容 3.左下角坐标 4.字体格式 5.字体大小 6.字体颜色 7.字体粗细 8.默认8 namedWindow(drawdemo_win, CV_WINDOW_AUTOSIZE); imshow(drawdemo_win, bgImage); waitKey(0); return 0; } //直线函数 void MyLines() { Point p1 = Point(20, 30); Point p2; p2.x = 300; p2.y = 300; Scalar color = Scalar(0, 0, 255); line(bgImage, p1, p2, color, 2, LINE_8); //LINE_8为反锯齿线条 //line的参数:1.写入图像 2.p1点 3.p2点 4.颜色 5.线条的粗细 6.线条的类型 } //矩形函数 void MyRectangle() { Rect rect = Rect(200, 100, 300, 300); //Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height) //定义一个左上角点坐标为(_x, _y)的_width*_height矩形窗口 Scalar color = Scalar(255, 0, 0); rectangle(bgImage, rect, color, 2, LINE_8); } //椭圆函数 void MyEllipse() { Scalar color = Scalar(0, 255, 0); ellipse(bgImage, Point(bgImage.cols / 2, bgImage.rows / 2), Size(bgImage.cols / 4, bgImage.rows / 8), 45, 0, 360, color, 2, LINE_8); //ellipse函数参数: 1. 绘制的目标图像 2.绘制椭圆的中心 3.绘制椭圆的长轴和短轴 4.椭圆的倾斜角度 5.6.线条的角度(弧)(0-360) 7.颜色 8.线条粗细 9.线条类型 } //圆函数 void MyCircle() { Scalar color = Scalar(0, 255, 255); Point center = Point(bgImage.cols / 2, bgImage.rows / 2); circle(bgImage, center, 150, color, 2, 8);
// 圆参数:1.图像, 2.圆心 3.半径 4.颜色 5.圆周线条粗细 6.线条类型 } //多边形填充函数 void MyPolygon() { Point pts[1][5]; //定义一个五个点的数组二维 pts[0][0] = Point(100, 100); pts[0][1] = Point(100, 200); pts[0][2] = Point(200, 200); pts[0][3] = Point(200, 100); pts[0][4] = Point(100, 100); const Point*ppts[] = { pts[0] }; //ppts的指针指向pts[0]的数组 int npt[] = { 5 }; // 一维数组npt为5,代表5个点 Scalar color = Scalar(255, 0, 255); fillPoly(bgImage, ppts, npt, 1, color, 8); //fillPoly函数参数:1.输入图像 2.二维数组指针指向顶点 3.一维数组指针顶点个数 4. 多边形个数 5.填充颜色 6.line_type=8默认参数 }
结果如图所示: