.pushback minAreaRect fitEllipse

.pushback(temp)

该函数将一个新的元素加到vector的最后面,位置为当前最后一个元素的下一个元素

for(int i = 0 ; i < 10 ; i ++)  
{  
vector.push_back(line);  
}  

#minAreaRect

minAreaRect - min Area Rect 最小区域矩形;计算指定点集的最小区域的边界矩形,矩形可能会发生旋转 possibly rotated,以保证区域面积最小。

cv2.minAreaRect(points) -> retval

参数:

points - 2D点的矢量( vector of 2D points )

返回值:

 元组((最小外接矩形的中心坐标),(宽,高),旋转角度)----->    ((x, y), (w, h), θ )

如 ((458.70343017578125, 381.97894287109375), (202.513916015625, 634.2526245117188), -45.707313537597656)

但绘制这个矩形,一般需要知道矩形的 4 个顶点坐标;通常是通过函数 cv2.boxPoints()获取。

椭圆拟合fitEllipse

OpenCV中提供的椭圆拟合API如下:


RotatedRect fitEllipse(InputArray points)
输入:二维点集,要求拟合的点至少为6个点。存储在std::vector<> or Mat
处理:该函数使用的是最小二乘的方法进行拟合的。参考论文:《Direct least square fitting of ellipses》

输出:RotatedRect 类型的矩形,是拟合出椭圆的最小外接矩形。

	//定义圆形、方形、旋转矩形、椭圆的存储容器
	vector<vector<Point>> contours_ploy(contours.size());
	vector<Rect> rects_ploy(contours.size());
	vector<Point2f> circle_centers(contours.size());
	vector<float> circle_radius(contours.size());
	vector<RotatedRect> RotatedRect_ploy;//注意:由于下面赋值的过程中有个点数大于5的条件,所以这里没有直接初始化,才有下面pushback的方法添加值。
	vector<RotatedRect> ellipse_ploy;//注意,这里是画椭圆,但是容器类型是 RotatedRect

//将结果放到各自的容器中
	for (size_t i = 0; i< contours.size(); i++)
	{
		approxPolyDP(contours[i], contours_ploy[i], 5, true);
		rects_ploy[i] = boundingRect(contours_ploy[i]);
		minEnclosingCircle(contours_ploy[i], circle_centers[i], circle_radius[i]);
 
		if (contours_ploy[i].size() >5)
		{
			RotatedRect temp1 = minAreaRect(contours_ploy[i]);
			RotatedRect_ploy.push_back(temp1);
 
			RotatedRect temp2 = fitEllipse(contours_ploy[i]);
			ellipse_ploy.push_back(temp2);
		}
	}


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值