OpenCV基础(五)---图形绘制

图形绘制

OpenCV提供了直线,矩形,圆,椭圆的绘制函数,下面介绍用法

直线绘制:line()

函数原型: 

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

参数声明:

  • InputOutputArray img:输出图像
  • Point pt1:线段的第一个点
  • Point pt2:线段的第二个点
  • const Scalar& color:直线颜色
  • int thickness = 1:直线粗细程度
  • int lineType = LINE_8:直线类型
  • int shift = 0:点坐标的小数点位数

代码:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 using namespace cv;
 6  
 7 int main(int argc, char** argv) {
 8 
 9     Mat srcImage = imread("D:/shenjianxin.png");
10     if (!srcImage.data) {
11         cout << "could not load image" << endl;
12         return -1;
13     }
14 
15     Point p1 = Point(200, 300);     
16     Point p2 = Point(400, 300);
17     Scalar color = Scalar(0, 0, 255);
18     line(srcImage, p1, p2, color, 2, 8, 0);
19     imshow("直线绘制", srcImage);
20 
21     waitKey(0);
22     return 0;
23 }

效果图:

矩形绘制:rectangle()

函数原型:

void rectangle(CV_IN_OUT Mat& img, Rect rec,
               const Scalar& color, int thickness = 1,
               int lineType = LINE_8, int shift = 0);

函数声明:

  • CV_IN_OUT Mat& img:输出图像
  •  Rect rec: 矩形的位置和长宽
  •  const Scalar& color:矩形颜色
  • int thickness = 1:线宽
  • int lineType = LINE_8:直线类型
  •  shit:点坐标的小数点位数

代码:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 using namespace cv;
 6  
 7 int main(int argc, char** argv) {
 8 
 9     Mat srcImage = imread("D:/shenjianxin.png");
10     if (!srcImage.data) {
11         cout << "could not load image" << endl;
12         return -1;
13     }
14 
15     Rect rect = Rect(200, 100, 200, 200);
16     Scalar color = Scalar(255, 0, 0);
17     rectangle(srcImage, rect, color, 2, LINE_8);
18     imshow("矩形绘制", srcImage);
19 
20     waitKey(0);
21     return 0;
22 }

效果图:

圆形绘制:circle()

函数原型:

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 线型
  • shift 坐标点的小数点位数

代码:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 using namespace cv;
 6  
 7 int main(int argc, char** argv) {
 8 
 9     Mat srcImage = imread("D:/shenjianxin.png");
10     if (!srcImage.data) {
11         cout << "could not load image" << endl;
12         return -1;
13     }
14 
15     Scalar color = Scalar(0, 0, 255);
16     Point center = Point(srcImage.cols / 2, srcImage.rows / 2);
17     circle(srcImage, center, 99, color, 2, 8);
18     imshow("圆形绘制", srcImage);
19 
20     waitKey(0);
21     return 0;
22 }

效果图:

椭圆绘制:ellipse()

函数原型:

 void 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);

函数声明:

  • img 图像
  • center 椭圆原心
  • axes  椭圆x轴长度的一半,y轴长度的一半
  • angle 椭圆旋转角度
  • startAngle 起始角度
  • endAngle 终止角度
  • color 椭圆颜色
  • thickness 线宽
  • linetype 线型
  • shift 坐标小数点位数

代码:

 1 #include <opencv2/opencv.hpp>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 using namespace cv;
 6  
 7 int main(int argc, char** argv) {
 8 
 9     Mat srcImage = imread("D:/shenjianxin.png");
10     if (!srcImage.data) {
11         cout << "could not load image" << endl;
12         return -1;
13     }
14 
15     Scalar color = Scalar(0, 255, 0);
16     ellipse(srcImage, Point(srcImage.cols / 2, srcImage.rows / 2), Size(srcImage.cols / 4, srcImage.rows / 4), 0, 0, 360, color, 2, LINE_8);
17     imshow("椭圆绘制", srcImage);
18 
19     waitKey(0);
20     return 0;
21 }

效果图:

原文地址:https://www.cnblogs.com/zmm1996/p/10664009.html