您当前的位置: 首页 >  opencv

txwtech

暂无认证

  • 3浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

OpenCV08绘制线、矩形、圆、椭圆等基本几何形状,添加文字

txwtech 发布时间:2021-03-29 23:10:06 ,浏览量:3

/* txwtech2021.3.28OpenCV08 绘制形状与文字 使用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三个通道

绘制线、矩形、园、椭圆等基本几何形状 画线 cv::line (LINE_4\LINE_8\LINE_AA-反锯齿) 画椭圆cv::ellipse 画矩形cv::rectangle 画圆cv::circle 画填充cv::fillPoly

填充矩形 可以通过多边形填充来填充矩形

随机数生成cv::RNG 生成高斯随机数gaussian (double sigma) 生成正态分布随机数uniform (int a, int b)

绘制添加文字 putText函数 中设置fontFace(cv::HersheyFonts), - fontFace, CV_FONT_HERSHEY_PLAIN - fontScale , 1.0, 2.0~ 8.0

*/


/*
txwtech2021.3.28OpenCV08
绘制形状与文字
使用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三个通道

绘制线、矩形、园、椭圆等基本几何形状
画线 cv::line (LINE_4\LINE_8\LINE_AA-反锯齿)
画椭圆cv::ellipse
画矩形cv::rectangle
画圆cv::circle
画填充cv::fillPoly

填充矩形
可以通过多边形填充来填充矩形

随机数生成cv::RNG
生成高斯随机数gaussian (double sigma)
生成正态分布随机数uniform (int a, int b)



绘制添加文字
putText函数 中设置fontFace(cv::HersheyFonts),
- fontFace, CV_FONT_HERSHEY_PLAIN
- fontScale , 1.0, 2.0~ 8.0






*/
#include 
#include 

using namespace std;
using namespace cv;

Mat src_bgImg;
const char *draw_window = "shape and text show";
void DrawLine();
void DrawRectangle();
void DrawEllipse();//绘制椭圆
void DrawCircle();
void DrawPolygon();//多边形
void DrawRandomLine();//画随机线

int main(int argc, char *argv[])
{
	src_bgImg = imread("E:\\pictures\\test1.jpg");
	if (!src_bgImg.data)
	{
		printf("failed to load imgs");
		return -1;
	}
	DrawLine();
	DrawRectangle();
	DrawEllipse();
	DrawCircle();
	DrawPolygon();
	
	putText(src_bgImg,"hi OpenCV",Point(200,200),CV_FONT_HERSHEY_COMPLEX,1.0,Scalar(255,255,0),1,8);//绘制添加文字
	namedWindow(draw_window,CV_WINDOW_AUTOSIZE);
	imshow(draw_window,src_bgImg);
	DrawRandomLine();
	waitKey(0);

	return 0;
}
void DrawLine()
{
	Point p1 = Point(100, 50);
	//也可以这样写
	//p1.x = 30;
	//p1.y = 50;
	Point p2 = Point(100,500);
	Scalar color = Scalar(255,0,255);
	line(src_bgImg,p1,p2,color,2,LINE_8);//划一根竖线,2表示线的粗细

}
//画矩形
void DrawRectangle()
{
	Rect rect = Rect(150,20,100,100);
	Scalar color = Scalar(255, 0, 255);
	rectangle(src_bgImg,rect,color,3,LINE_8);
}
void DrawEllipse()
{
	//(背景图像,椭圆的中心,椭圆的半径,角度,0,360,颜色,粗细,line的类型)
	//0:开始度数,360:结束的度数,也可以0-180,画成弧形,0-100度位置。等等
	Scalar color = Scalar(255, 0, 255);
	ellipse(src_bgImg,Point(src_bgImg.cols/2,src_bgImg.rows/2),Size(src_bgImg.cols/4,src_bgImg.rows/8),90,0,360,color,2,LINE_8);
}
void DrawCircle()
{
	Scalar color = Scalar(0, 255, 0);
	//定义圆形坐标
	Point center = Point(src_bgImg.cols/2,src_bgImg.rows/2);
	circle(src_bgImg,center,80,color,2,LINE_8);

}
void DrawPolygon()
{
	Scalar color = Scalar(0, 255, 0);
	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 npt[] = {5};
	fillPoly(src_bgImg,ppts,npt,1,color,8);//line_8也可以直接写成8
}
void DrawRandomLine()//画随机线
{
	RNG rng(12345);
	Point pt1;
	Point pt2;
	Mat bg_imgs = Mat::zeros(src_bgImg.size(),src_bgImg.type());
	namedWindow("randow_window",CV_WINDOW_AUTOSIZE);
	for (int i = 0; i < 20000; i++)
	{
		pt1.x = rng.uniform(0, src_bgImg.cols);
		pt2.x = rng.uniform(0, src_bgImg.cols);
		pt1.y = rng.uniform(0, src_bgImg.cols);
		pt2.y = rng.uniform(0, src_bgImg.cols);
		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		if (waitKey(50) > 0)
		{
			break;
		}
		line(bg_imgs, pt1, pt2, color, 1, 8);
		imshow("randow_window", bg_imgs);
	}
}

 

关注
打赏
1665060526
查看更多评论
立即登录/注册

微信扫码登录

0.0802s