14 图像几何形状绘制

14 图像几何形状绘制

opencv知识点:

  • 四种几何图形绘制 - 矩形 圆形 线段 椭圆
  • 图片融合 - addWeighted()

本课所解决的问题:

  • 如何绘制几何图形?

1.图形绘制

opencv中,图像的坐标是,↓y,→x,在填写参数的时候一定要注意
接下来,我们开始绘制几何图形

矩形

之前已经介绍过两种rectangle的所有参数,这里不再赘述
//函数定义
void drawing_demo(Mat& image);     


//函数实现
void QuickDemo::drawing_demo(Mat& image) {

	Rect rect;//关于rect,我们只要记住四个属性即可
	rect.x = 50;
	rect.y = 50;
	rect.width = 50;
	rect.height = 50;

	Mat dst = Mat::zeros(image.size(), image.type());
	rectangle(dst, rect, Scalar(0, 0, 255), -1, LINE_8, 0);

	imshow("绘制图形", dst);

}	

acacb3f49529a4a84b00e6c7985e8eb

圆形

circle
	绘制圆形
		共7个参数
			第1个参数 输入
			第2个参数 圆心点
			第3个参数 圆形半径
			第4个参数 圆形颜色
			第5个参数 线宽
			第6个参数 lineType
			第7个参数  缩小图像,同时缩短圆心与(0,0)位置的距离
					  0表示不变
					  1表示图像*1/2,同时距离(0,0)的x方向和y方向距离*1/2
					  2表示图像*(1/2)^2,同时距离(0,0)的x方向和y方向距离*(1/2)^2

void QuickDemo::drawing_demo(Mat& image) {

	Mat dst = Mat::zeros(image.size(), image.type());

	circle(dst, Point(100, 100), 50, Scalar(200, 0, 0), -1, 8, 0);

	imshow("绘制图形", dst);
}

05b9fb3ada1ea602831d34cf7629ca2

线段

line
	绘制线段
		共7个参数
			第1个参数 输入
			第2个参数 起点
			第3个参数 终点
			第4个参数 线段颜色
			第5个参数 线宽(注意,这个时候线宽只能>=0)
			第6个参数 lineType
			第7个参数  缩短线段左上顶点与(0,0)位置的距离
					  0表示不变
					  1表示图像*1/2,同时距离(0,0)的x方向和y方向距离*1/2
					  2表示图像*(1/2)^2,同时距离(0,0)的x方向和y方向距离*(1/2)^2

void QuickDemo::drawing_demo(Mat& image) {

	Mat dst = Mat::zeros(image.size(), image.type());
	line(dst, Point(100, 100), Point(300, 300), Scalar(33, 55, 66), 30, 8, 0);
	
	imshow("绘制图形", dst);
}

5bf93d94d582e1b82151b9611a3f3d1

椭圆

opencv中,椭圆有两种传参方式

第一种,全功能版本

ellipse
	绘制椭圆
		共10个参数
			第1个参数 输入
			第2个参数 椭圆中心
			第3个参数 椭圆两个轴的一半(类似于圆的半径)
			第4个参数 椭圆的初始角度
			第5个参数 绘制的起点角度
			第6个参数 绘制的终点角度
			第7个三叔 椭圆的颜色
			第8个参数 线宽
			第9个参数 lineType
			第10个参数 缩小图像,同时缩短圆心与(0,0)位置的距离
					  0表示不变
					  1表示图像*1/2,同时距离(0,0)的x方向和y方向距离*1/2
					  2表示图像*(1/2)^2,同时距离(0,0)的x方向和y方向距离*(1/2)^2

void QuickDemo::drawing_demo(Mat& image) {

	Mat dst = Mat::zeros(image.size(), image.type());
	ellipse(dst, Point(200, 200), Size(100, 50), 0, 0, 270, Scalar(200, 0, 0), 10, 8, 0);
	
	imshow("绘制图形", dst);
}

62a2b6186f1d60983ca972bd180230a

第二种,简易版本

ellipse
	绘制椭圆
		共5个参数
			第1个参数 输入
			第2个参数 RotatedRect
			第3个参数 椭圆颜色
			第4个参数 线宽
			第5个参数 lineType
void QuickDemo::drawing_demo(Mat& image) {

	Mat dst = Mat::zeros(image.size(), image.type());

	RotatedRect rrt;
	rrt.center = Point(200, 200);	//椭圆的中心
	rrt.size = Size(100, 50);		//椭圆两个轴大小的一半
	rrt.angle = 0;				//椭圆的旋转角度

	ellipse(dst,rrt,Scalar(200,0,0),10,8);
	
	imshow("绘制图形", dst);
}

bc4653bae45e554fcab53b9f6d81d0e

2.图像融合几何图形

接下来,这里演示一种很有意思的用法

  • 利用addWeighted融合几何图形与原图像
void QuickDemo::drawing_demo(Mat& image) {

	Mat dst = Mat::zeros(image.size(), image.type());

	RotatedRect rrt;

	rrt.center = Point(200, 200);	//椭圆的中心
	rrt.size = Size(100, 50);		//椭圆两个轴大小的一半
	rrt.angle = 0;				//椭圆的旋转角度

	ellipse(dst,rrt,Scalar(200,0,0),10,8);
	
	addWeighted(image, 0.7, dst, 0.3, 0, dst);
	
	imshow("绘制图形", dst);
}

可以看到,这种隐约的图形效果很nice,只在原图像上绘制图形是达不到这种效果的

de824ead2f45c52ab9f3b2c08e64efb

本课所用API查阅

rectangle()

circle()

line()

ellipse()

addWeighted()

dst = src1*alpha + src2*beta + gamma;

9e738260c5ff486bbef0600e58552c9d

原文链接: https://www.cnblogs.com/L707/p/17049620.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    14 图像几何形状绘制

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/311704

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午12:06
下一篇 2023年2月16日 下午12:07

相关推荐