opencv学习笔记七:绘制形状和文字
程序员文章站
2022-07-12 22:39:45
...
主函数如下:
#include<opencv2/opencv.hpp>
using namespace cv;
void MyLine();
void MyRectangle();
void MyEllipse();
void MyCircle();
void MyRandLine();
int main(int arc, char** argv)
{
Mat src = imread("1.jpg");
MyLine();
MyRectangle();
MyCircle();
MyEllipse();
putText(src, "Hello Opencv", Point(30, 30), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 0), 3, 8);
MyRandLine();
namedWindow("src",CV_WINDOW_AUTOSIZE);
imshow("src", src);
waitKey(0);
return 0;
}
【1】绘制直线:line(img, p1, p2, color, thickness, line_type);
参数分别为:图像,起始点,终止点,颜色,线宽,线型。
void MyLine() {
Point p1 = Point(20, 30);
Point p2;
p2.x = 300, p2.y = 300;
Scalar color = Scalar(0, 0, 255);
line(src, p1, p2, color, 1, LINE_8);
}
【2】绘制矩形:rectangle(img,rect,color,thickness,line_type);
参数分别为:图像,矩形变量(4个成员,分别为起始点横坐标,纵坐标,长,宽),颜色,线宽,线型。
void MyRectangle() {
Rect rect = Rect(179, 87, 100, 100);
Scalar color = Scalar(255, 0, 0);
rectangle(src,rect,color,2,LINE_8);
}
【3】绘制圆:circle(img, center, radius, color, thickness, line_type);
参数分别为:图像,圆心坐标,半径,颜色,线宽,线型。
void MyCircle() {
Scalar color = Scalar(0, 255, 255);
circle(src, Point(src.cols / 2, src.rows / 2), 100, color, 2, LINE_8);
}
【4】绘制椭圆:ellipse(img, center, size axes, angle, startAngle, endAngle, color, thickness, line_type);
参数分别为:图像,椭圆中心坐标,长短轴大小(size变量2个成员,分别为宽和高),角度,起始角度,终止角度,颜色,线宽,线型。
void MyEllipse() {
Scalar color = Scalar(0, 255, 0);
ellipse(src, Point(src.cols / 2, src.rows / 2), Size(src.cols / 4, src.rows / 8), 90, 0, 360, color, 2, LINE_8);
}
【5】绘制文字:putText(img, text, p, font, scale, color, thickness, line_type);
参数分别为:图像,文字,起始坐标,字体,放缩,颜色,线宽,线型。
putText(src, "Hello Opencv", Point(30, 30), CV_FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 0), 3, 8);
【6】绘制随机线:
void MyRandLine() {
RNG rng(1);//1为随机种子
Point p1, p2;
Mat dst = Mat::zeros(src.size(), src.type());
for (int i = 0; i < 1000; i++) {
p1.x = rng.uniform(0, src.cols);
p2.x = rng.uniform(0, src.cols);
p1.y = rng.uniform(0, src.rows);
p2.y = rng.uniform(0, src.rows);
Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
//程序执行到当前时,会等待50ms,其间用户触发了一个按键,就会被设置成这个按键的ASCLL码
if (waitKey(50) > 0) {
break;
}
line(dst, p1, p2, color, 1, 8);
namedWindow("随机线");
imshow("随机线", dst);
}
}