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个参数 线宽(注意,这个时候线宽只能>=06个参数 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

posted @   L707  阅读(121)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
主题色彩