1. C/C++

OpenCV-第八话-绘制形状与文字

一.写在前面

1.使用cv::Pointcv::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;
}