一.写在前面
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;
}