OpenCV(五)绘制图形与文本

本文详细介绍了如何使用OpenCV库在图像上绘制直线、矩形、椭圆、圆形以及添加文本。通过示例代码展示了各种图形的绘制方法,包括line()、rectangle()、ellipse()、circle()和putText()函数的使用,帮助读者掌握OpenCV中的基本图形操作。
摘要由CSDN通过智能技术生成

 

目录

一、绘制直线

1、函数line()

2、代码

3、效果

二、绘制矩形

 1、函数rectangle()

1-1、左上角顶点+右下角顶点

 1-2、矩形位置和长宽

 2、代码

3、效果

三、绘制椭圆

1、函数ellipse()

2、代码

3、效果

四、绘制圆形

1、circle()函数

2、代码

3、效果

五、添加文本

1、putText()函数 

2、代码

3、效果

总代码

参考资料:


注:OpenCV中RGB排列是按照BGR排的(即相反顺序 )

一、绘制直线

1、函数line()

line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0);

line(img, Point(0, 0), Point(200, 200), Scalar(0, 0, 255),  2);
//	  图像   起点		 终点			颜色(红)				线粗细

参数:
img: 要绘制线段的图像。
pt1: 线段的起点。
pt2: 线段的终点。
color: 线段的颜色,通过一个Scalar对象定义。
thickness: 线条的宽度。
lineType: 线段的类型。可以取值8, 4, 和CV_AA, 分别代表8邻接连接线,4邻接连接线和反锯齿连接线。默认值为8邻接。为了获得更好地效果可以选用CV_AA(采用了高斯滤波)。
shift: 坐标点小数点位数。

2、代码

//绘制直线
void DrawLine()
{
	line(img, Point(0, 0), Point(200, 200), Scalar(0, 0, 255),  2);
	//	  图像   起点			  终点					颜色(红R)			线粗细
}

3、效果

二、绘制矩形

 1、函数rectangle()

 两种调用方式:

1-1、左上角顶点+右下角顶点

//方式1:左上角顶点+右下角顶点
	rectangle(img, Point(100, 100), Point(400, 400), Scalar(255, 0, 0), 2,		8);
	//		 图像  左上角顶点			右下角顶点		 颜色(蓝B)		   宽度  线型(默认8)

 1-2、矩形位置和长宽

//方式2:矩形位置和长宽
rectangle(img, Rect(200, 200, 300, 300), Scalar(255, 255, 0), 2, 8);
//						矩形位置和长宽	(蓝绿)

 2、代码

//绘制矩形
void DrawRectangle()
{
	//方式1:左上角顶点+右下角顶点
	rectangle(img, Point(100, 100), Point(400, 400), Scalar(255, 0, 0), 2,		8);
	//				图像	  左上角顶点			 右下角顶点			颜色(蓝B)			  宽度   线型(默认8)
	//方式2:矩形位置和长宽
	rectangle(img, Rect(200, 200, 300, 300), Scalar(255, 255, 0), 2, 8);
	//						矩形位置和长宽					(蓝绿)
}

3、效果

三、绘制椭圆

1、函数ellipse()

ellipse(img, Point(img.cols / 2, img.rows / 2), Size(img.cols / 4, img.rows / 2), 90,
//                      圆心					     (长,				宽)			 偏转 			
0,			    360,			Scalar(255, 0, 255), 2, LINE_8);
//起始角度	    终止角度	        颜色(蓝红)		    宽度	 线条类型

详解:

参数:

img:图像。
center:椭圆圆心坐标。
axes:轴的长度(两个轴)。
angle:偏转的角度。
start_angle:圆弧起始角的角度。
end_angle:圆弧终结角的角度。
color:线条的颜色。
thickness:线条的粗细程度。
line_type:线条的类型。
shift:圆心坐标点和数轴的精度。

2、代码

//绘制椭圆
void DrawEllipse()
{
	ellipse(img, Point(img.cols / 2, img.rows / 2), Size(img.cols / 4, img.rows / 2), 90,			0,			360,			Scalar(255, 0, 255), 2, LINE_8);
						//圆心													(长,				宽)				  偏转角	起始角度	终止角度	颜色(蓝红)		     宽度	  线条类型
}

3、效果

四、绘制圆形

1、circle()函数

circle(img, Point(img.cols/2, img.rows/2), 200, Scalar(0, 255, 255), 2,		 8);
	//		图像	  圆心坐标				   半径  颜色				线条粗细  线条类型

2、代码

//绘制圆形
void DrawCircle()
{
	circle(img, Point(img.cols/2, img.rows/2), 200, Scalar(0, 255, 255), 2,			   8);
	//		图像	  圆心坐标									  半径  颜色					    线条粗细  线条类型
}

3、效果

五、添加文本

1、putText()函数 

putText(img, "Hello OpenCV", Point(200, 200), FONT_HERSHEY_COMPLEX,			 
	//			图像		文本					位置(左上角)			字体类型				
2.0,        Scalar(255, 0, 255), 1,				8);				
//字体大小	字体颜色			     线条粗细	线条类型

2、代码

//添加文本
void DrawText()
{
	putText(img, "Hello OpenCV", Point(200, 200), FONT_HERSHEY_COMPLEX, 2.0,			Scalar(255, 0, 255), 1,				8); 
	//			图像		文本					位置(左上角)			字体类型								字体大小	字体颜色			       线条粗细	线条类型
}

3、效果

目录

 

总代码

//图形与文本绘制
//注:OpenCV中RGB排列是按照BGR排的,即相反顺序
#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

Mat img;

//图像初始化
void Image_Init()
{
	img = Mat::zeros(Size(800, 600), 16);				//创建一个黑白图像
	
	if (img.empty() )
	{
		printf("图像加载失败");
		exit(0);
	}
}

//绘制直线
void DrawLine()
{
	line(img, Point(0, 0), Point(200, 200), Scalar(0, 0, 255),  2);
	//	  图像   起点			  终点					颜色(红R)			线粗细
}

//绘制矩形
void DrawRectangle()
{
	//方式1:左上角顶点+右下角顶点
	rectangle(img, Point(100, 100), Point(400, 400), Scalar(255, 0, 0), 2,		8);
	//				图像	  左上角顶点			 右下角顶点			颜色(蓝B)			  宽度   线型(默认8)
	//方式2:矩形位置和长宽
	rectangle(img, Rect(200, 200, 300, 300), Scalar(255, 255, 0), 2, 8);
	//						矩形位置和长宽					(蓝绿)
}

//绘制椭圆
void DrawEllipse()
{
	ellipse(img, Point(img.cols / 2, img.rows / 2), Size(img.cols / 4, img.rows / 2), 90,			0,			360,			Scalar(255, 0, 255), 2, LINE_8);
						//圆心													(长,				宽)				  偏转角	起始角度	终止角度	颜色(蓝红)		     宽度	  线条类型
}

//绘制圆形
void DrawCircle()
{
	circle(img, Point(img.cols/2, img.rows/2), 200, Scalar(0, 255, 255), 2,			   8);
	//		图像	  圆心坐标									  半径  颜色					    线条粗细  线条类型
}

//添加文本
void DrawText()
{
	putText(img, "Hello OpenCV", Point(200, 200), FONT_HERSHEY_COMPLEX, 2.0,			Scalar(255, 0, 255), 1,				8); 
	//			图像		文本					位置(左上角)			字体类型								字体大小	字体颜色			       线条粗细	线条类型
}

//显示图像
void Show()
{
	imshow("画板", img);
}

int main()
{
	Image_Init();								//图像初始化

	//DrawLine();								//画直线
	//DrawRectangle();						//画矩形
	//DrawEllipse();							//画椭圆
	//DrawCircle();								//画圆形
	DrawText();								    //绘制文本

	Show();										//显示图像

	waitKey(0);

	return 0;
}

参考资料:

https://blog.csdn.net/weixin_41695564/article/details/79919474

https://blog.csdn.net/weixin_28949185/article/details/84839167

https://blog.csdn.net/Destiny_zc/article/details/106472118 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_(*^▽^*)_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值