Opencv回顾--形状绘制

本文回顾了OpenCV中的形状绘制方法,包括点的定义、尺寸处理、线的绘制、矩形(正交及倾斜)、圆和椭圆的创建,以及如何判断直线是否在矩形内。此外,还涵盖了非封闭多边形、填充凸多边形的绘制技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

形状绘制主要函数

基础

定义一个点

Point(int x, int y) 
Point pt1(20,30);
Point pt2;
pt2.x = 20;
pt2.y = 30;
Point pt =  Point(10, 8);

Point2f:2維浮點數點類別,通常用於幾何計算,用法和Point雷同,只是x和y是浮點數。
Point3i、Point3f、Point3d代表3維點x、y、z,而成員型態分別為int、float、double。
 画出来下面和圆形一起写
尺寸
Size:
尺寸類別,成員有width和height,分別表示寬和長(int型態),可用area()函式得到面積,以下為建構式最基本兩種賦值方法:
Size(int width, int height) 
Size size1(150, 100);
Size size2;
size2.width = 150;
size2.height = 100;
int myArea = size2.area();
线
绘制连接两个点的线段。
void line(InputOutputArray img,Point pt1,Point pt2,const Scalar&color,
                     int thickness = 1,int lineType = LINE_8,int shift = 0);
img			图片。
pt1			线段的第一个点。
pt2			线段的第二点。
color		线条颜色。
thickness	线条粗细。
lineType	行的类型。请参阅#LineTypes。
shift		点坐标中的小数位数。

函数cv :: arrowedLine在图像中的pt1和pt2点之间绘制一个箭头。
void arrowedLine(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
                     int thickness=1, int line_type=8, int shift=0, double tipLength=0.1);
img			图片。
pt1			箭头开始的点。
pt2			箭头指向的点。
color		线条颜色。
thickness	线条粗细。
line_type	行的类型。请参阅#LineTypes
shift		点坐标中的小数位数。
tipLength	箭头尖端相对于箭头长度的长度
矩形

创建一个矩形

Rect(int x, int y, int width, int height)
			参数: 
				1、矩形左上角x坐标
				2、矩形左上角y坐标
				3、矩形的宽
				4、矩形的高
Rect rect1(20,30,150,100);
Rect rect2;
rect2.x = 20;
rect2.y = 30;
rect2.width = 150;
rect2.height = 100;
int myRectArea = rect2.area();
计算矩形的面积
绘画一个矩形
void rectangle(InputOutputArray img, Point pt1, Point pt2,
                          const Scalar& color, int thickness = 1,
                          int lineType = LINE_8, int shift = 0);
参数:
img		输入图片。
pt1		矩形的顶点。
pt2		与pt1相对的矩形的顶点。
color	矩形颜色或亮度(灰度图像)。
thickness		构成矩形的线条的粗细。 负值,如#FILLED,意味着该函数必须绘制一个填充矩形。
lineType		行的类型。 
shift		点坐标中的小数位数。

void rectangle(InputOutputArray img, Rect rec,
                          const Scalar& color, int thickness = 1,
                          int lineType = LINE_8, int shift = 0);
和上面的区别在于用Rect 矩形类代替点

绘制线的类型
     FILLED = -1,
     LINE_4 = 4,//!<4连线
     LINE_8 = 8,//!<8连线
     LINE_AA = 16 //!<抗锯齿线
带角度的矩形

    RotatedRect(const Point2f& center, const Size2f& size, float angle);
    参数:
	center		矩形质心。
	size			矩形的宽度和高度。
	angle		顺时针方向的旋转角度。 当角度为0°,90°,180°,270°等时,矩形变为右上角的矩形。

    RotatedRect(const Point2f& point1, const Point2f& point2, const Point2f& point3);
    RotatedRect的任何3个端点。 它们必须按顺序给出

void circle(
		cv::Mat& img, // 待绘制的图像
		cv::Point center, // 圆心位置
		int radius, // 圆的半径
		const cv::Scalar& color, // 线条的颜色(RGB)
		int thickness = 1, // 线宽
		int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
		int shift = 0 // 偏移量
	)
	如果将半径设定为0就表示一个点
椭圆
void ellipse(InputOutputArray img, Point center, Size axes,
                        double angle, double startAngle, double endAngle,
                        const Scalar& color, int thickness = 1,
                        int lineType = LINE_8, int shift = 0);
                   
img				图片。
center			椭圆中心。
axes			椭​​圆主轴大小的一半。
angle			椭圆旋转角度(以度为单位)。
startAngle		椭圆弧的起始角度(以度为单位)。
endAngle		以度为单位的椭圆弧的结束角度。
color			椭圆颜色。
thickness		椭圆弧形轮廓的粗细,如果是正的。否则,这表明将绘制一个填充的椭圆扇区。
lineType		椭圆边界的类型。请参阅#LineTypes
shift			中心坐标和轴值的小数位数。

void ellipse(InputOutputArray img, const RotatedRect& box, const Scalar& color,
                        int thickness = 1, int lineType = LINE_8);
img			图片。
box			通过RotatedRect替代椭圆表示。这意味着函数绘制内接在旋转矩形中的椭圆。
color		椭圆颜色。
thickness	椭圆弧形轮廓的粗细,如果是正的。否则,这表明将绘制一个填充的椭圆扇区。
lineType	椭圆边界的类型。请参阅#LineTypes                        
判断一条直线是否在某个矩形内
	bool clipLine( // 如果直线line任何一部分在矩形 'imgRect'内,则返回true
		cv::Rect imgRect, // 要穿过的矩形
		cv::Point& pt1, // 直线的第一个端点
		cv::Point& pt2 // 直线的第二个端点
	);
	bool clipLine( // 如果直线line任何一部分在图像大小Size内,则返回true
		cv::Size imgSize, // 图像的大小,相当于矩形的端点在(0,0)
		cv::Point& pt1, // 直线的第一个端点
		cv::Point& pt2 // 直线的第二个端点
	);
绘制非封闭多边形即折线
	void polyLines(
		cv::Mat& img, // 待绘制的图像
		const cv::Point** pts, // c风格的点序列的序列
		int* npts, // 'pts[i]'中点的数目
		int ncontours, // 'pts'中的序列数
		bool isClosed, // 如果是true, 则连接首尾两点
		//这个时候就是绘制多边形了
		const cv::Scalar& color, // 线条的颜色(RGB)
		int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
		int shift = 0 // 偏移量
	);
填充凸多边形
fillConvexPoly(Mat& img, const Point* pts, int npts, const Scalar& color, int lineType=8, int shift=0)
//注意:输入的多边形不能出现交叉,否则会出错。
img                      图像
pts                      指向单个多边形的指针数组
npts                     多边形的顶点个数
color                    多边形的颜色
LineType                 组成多边形的线条的类型
shift                    顶点坐标的小数点位数

Mat src = Mat::zeros(480,640,CV_8UC3);    
src.setTo(255);
Point PointArray[4];
PointArray[0] = Point(50,10);
PointArray[1] = Point(300,12);
PointArray[2] = Point(350,250);
PointArray[3] = Point(9,250);
fillConvexPoly(src,PointArray,4,Scalar(0,0,0));
绘制实心凸多边形
fillPoly(InputOutputArray img, InputArrayOfArrays pts,
                           const Scalar& color, int lineType = LINE_8, int shift = 0,
                           Point offset = Point() );
img			图片。
pts			多边形数组,其中每个多边形表示为点数组。
color		多边形颜色。
lineType	多边形边界的类型。 请参阅#LineTypes
shift		顶点坐标中的小数位数。
offset		轮廓的所有点的可选偏移量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值