一、编程环境:
OpenCV | 4.1.0 |
IDE | Visual Studio 2017 Enterprise (15.9.13) |
操作系统 | Windows 10 x64 中文专业版 (1903) |
二、OpenCV 中的绘制几何形状函数:
- 画直线:
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
int thickness = 1, int lineType = LINE_8, int shift = 0);
- 画矩形:
void rectangle(InputOutputArray img, Rect rec,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
如果 thickness 取负值(如:-1)则画填充矩形(矩形块)。
- 画圆:
void circle(InputOutputArray img, Point center, int radius,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
如果 thickness 取负值(如:-1) 则画实心圆。
- 画椭圆:
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);
如果 thickness 取负值(如:-1) 则画实心椭圆。
三、示例代码:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv) {
Mat img = Mat::zeros(Size(512, 512), CV_8UC3);
Rect rect(100, 100, 200, 200);
//画矩形
rectangle(img, rect, Scalar(255, 0, 0), 2, LINE_8, 0);
//画圆
circle(img, Point(256, 256), 150, Scalar(0, 0, 255), 2, LINE_8, 0);
//画椭圆
ellipse(img, Point(256, 256), Size(150, 50), 360, 0, 360, Scalar(0, 255, 0), 2, LINE_8, 0);
imshow("示例图1", img);
waitKey(0);
RNG rnd(0xFFFFFF);
img.setTo(Scalar(0, 0, 0));
//随机画线
for (int i = 0; i < 100000; i++) {
//随机产生起始坐标
int x1 = rnd.uniform(0, 512);
int y1 = rnd.uniform(0, 512);
int x2 = rnd.uniform(0, 512);
int y2 = rnd.uniform(0, 512);
//随机产生线条颜色
int b = rnd.uniform(0, 256);
int g = rnd.uniform(0, 256);
int r = rnd.uniform(0, 256);
//画线
line(img, Point(x1, y1), Point(x2, y2), Scalar(b, g, r), 1, LINE_AA, 0);
imshow("示例图2", img);
char c = waitKey(20);
if (c == 27)
break;
}
waitKey(0);
return 0;
}
四、运行效果: