opencv7-绘制形状和文字

一、理论

 

二、代码演示 

#include<opencv2\opencv.hpp>
#include<iostream>
#include<math.h>
using namespace cv;
using namespace std;
Mat bgImage;
const char* drawdemo_win = "draw shapes and text demo";
void MyLines();
void MyRectangle();
void MyEllipse();
void MyCircle();
void MyPolygon();
void RandomLineDemo();
int main(int argc,char** argv)
{
	bgImage= imread("E:\\vs2015\\opencvstudy\\3.jpg", 1);
	if (!bgImage.data)
	{
		cout << "could not load image1!" << endl;
		return -1;
	}
	MyLines();
	MyRectangle();
	MyEllipse();
	MyCircle();
	MyPolygon();
	RandomLineDemo();
	putText(bgImage, "Hello World", Point(350, 200), CV_FONT_HERSHEY_SCRIPT_COMPLEX,
 4, Scalar(0, 200, 200), 4, LINE_8);
	imshow(drawdemo_win, bgImage);
	waitKey(0);
	return 0;
}
void MyLines()
{
	Point p1 = Point(20, 20);
	Point p2;
	p2.x = 800;
	p2.y = 800;
	Scalar color = (0, 0, 255);
	line(bgImage, p1, p2, color, 1, LINE_AA);  //在图上画线..LINE_AA 代表反锯齿
}

void MyRectangle()
{
	Rect rect = Rect(500, 500, 300, 300);
	Scalar color = (255, 0, 0);
	rectangle(bgImage, rect, color, 2, LINE_4);
}

void MyEllipse()
{
	ellipse(bgImage, Point(bgImage.cols/2, bgImage.rows/2), Size(bgImage.cols / 4, 
bgImage.rows /8),90,0,360, Scalar(0, 255, 0), 2, LINE_8);
	// Point(x,y)代表椭圆中心点坐标 
	//Size(x,y)代表 长轴,短轴  
	// 90 代表椭圆的倾斜程度
	//0-360 代表椭圆的绘制弧度
	// Scalar(0, 255, 0) 椭圆颜色
}

void MyCircle()
{
	Point p1 = Point(bgImage.cols / 2, bgImage.rows / 2);
	circle(bgImage, p1, 100, Scalar(255, 255, 0), 2, LINE_8);
}

void MyPolygon()
{
	Point pts[1][5];
	pts[0][0] = Point(100, 100);
	pts[0][1] = Point(100, 200);
	pts[0][2] = Point(200, 200);
	pts[0][3] = Point(200, 100);
	pts[0][4] = Point(100, 100);

	const Point* ppts[] = { pts[0] };
	int nps[] = {5};
	Scalar color = Scalar(255, 12, 255);
	fillPoly(bgImage, ppts, nps, 1, color, LINE_8);  //1代表只有一个轮廓

}

void RandomLineDemo()
{
	RNG rng(12345);
	Point pt1;
	Point pt2;
	Mat bg = Mat::zeros(bgImage.size(), bgImage.type());
	for (int i = 0; i < 100000; i++)
	{
		pt1.x = rng.uniform(0, bgImage.cols);
		pt2.x = rng.uniform(0, bgImage.cols);
		pt1.y = rng.uniform(0, bgImage.rows);
		pt2.y = rng.uniform(0, bgImage.rows);
		line(bg, pt1, pt2, Scalar(rng.uniform(0, 255), rng.uniform(0, 255), 
rng.uniform(0, 255)), 2, LINE_8);
		if (waitKey(50) > 0)
		{
			break;
		}
		imshow("RandomLineDemo", bg);
	}
	
	


}

猜你喜欢

转载自blog.csdn.net/weixin_38383877/article/details/89195806
今日推荐