一.写在前面
1.使用cv::Point与cv::Scalar
#Point表示2D平面上一个点x,y
Point p;
p.x = 10;
p.y = 8;
or
p = Pont(10,8);
#Scalar表示四个元素的向量
Scalar(a, b, c);// a = blue, b = green, c = red表示RGB三个通道
2.绘制线、矩形、园、椭圆等基本几何形状
#画线 cv::line (LINE_4\LINE_8\LINE_AA)
#画椭圆cv::ellipse
#画矩形cv::rectangle
#画圆cv::circle
#画填充cv::fillPoly
3.随机数生成cv::RNG
#生成高斯随机数gaussian (double sigma)
#生成正态分布随机数uniform (int a, int b)
3.绘制添加文字
#putText函数 中设置fontFace(cv::HersheyFonts),
– fontFace, CV_FONT_HERSHEY_PLAIN
– fontScale , 1.0, 2.0~ 8.0
二.代码实现
/*
OpenCV 绘制形状与文字学习
Michael Jiang<sencom1997@outlook.com>
2019年7月24日14:25:42
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main()
{
//读取图像
Mat src = imread("D:/go.png", IMREAD_COLOR);
//判断读取是否成功
if (src.empty()) {
printf("pic load failed!\n");
return -1;
}
//定义显示窗口
namedWindow("src", WINDOW_AUTOSIZE);
namedWindow("rand", WINDOW_AUTOSIZE);
//绘制直线
Point p1 = { 50,50 };
Point p2 = {300,300};
line(src, p1, p2, Scalar(0, 0, 255),8);
//绘制矩形
rectangle(src, Rect(p1.x, p1.y, 400, 400), Scalar(255, 0, 0), 4);
//绘制椭圆
ellipse(src, RotatedRect(p2, Size(200, 300), 90),Scalar(0,255,0),4);
//绘制圆形
circle(src, p2, 100, Scalar(100, 100, 100), 4);
//绘制多边形
Point pts[1][5];
pts[0][0] = Point(10, 10);
pts[0][1] = Point(50, 50);
pts[0][2] = Point(100, 30);
pts[0][3] = Point(30, 100);
pts[0][4] = Point(80, 17);
const Point *ppts[] = { pts[0] };
int npt[] = { 5 };
fillPoly(src, ppts, npt,1,Scalar(200, 255, 30));
//绘制文字
putText(src, "Hello OpenCV", Point(200,200), FONT_HERSHEY_COMPLEX, 1.0, Scalar(66, 66, 66), 2);
//绘制随机直线
Mat rand = Mat::zeros(src.size(), src.type());
for (int i = 0; i < 100; i++) {
RNG rng(i);
p1.x = rng.uniform(0, src.cols);
p1.y = rng.uniform(0, src.rows);
p2.x = rng.uniform(0, src.cols);
p2.y = rng.uniform(0, src.rows);
line(rand, p1, p2, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)),1,8);
imshow("rand", rand);
}
imshow("src", src);
waitKey(0);
return 0;
}