作用:矩形边框(boundingRect),用于计算图像一系列点的外部矩形边界。
cv2.boundingRect(array) -> retval
参数
array - 灰度图像(gray-scale image)或 2D点集( 2D point set )
返回值
元组(x, y, w, h ) 矩形左上点坐标,w, h 是矩阵的宽、高,例如 (161, 153, 531, 446)
代码示例:
contours, hierarchy = cv2.findContours(re_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for c in contours: # find bounding box coordinates # 现计算出一个简单的边界框 x, y, w, h = cv2.boundingRect(c) # 画出矩形 cv2.rectangle(img, (x,y), (x+w, y+h), (0, 255, 0), 2)
作用: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()获取。
附 : cv2.boxPoints
作用:查找旋转矩形的 4 个顶点(用于绘制旋转矩形的辅助函数)。
cv2.boxPoints(box) -> points参数:
box - 旋转的矩形
返回值:
points - 矩形 4 个顶点组成的数组
返回值示例:
[[614.9866 675.9137 ] [161. 232.99997] [302.4203 88.04419] [756.40686 530.9579 ]]
代码示例:
contours, hierarchy = cv2.findContours(re_img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for c in contours: # find minimum area # 计算包围目标的最小矩形区域 rect = cv2.minAreaRect(c) # calculate coordinate of the minimum area rectangle box = cv2.boxPoints(rect) # normalize coordinates to integers box =np.int0(box) # 注:OpenCV没有函数能直接从轮廓信息中计算出最小矩形顶点的坐标。所以需要计算出最小矩形区域, # 然后计算这个矩形的顶点。由于计算出来的顶点坐标是浮点型,但是所得像素的坐标值是整数(不能获取像素的一部分), # 所以需要做一个转换 # draw contours cv2.drawContours(img, [box], 0, (0, 0, 255), 3) # 画出该矩形
但是要绘制这个矩形,我们需要矩形的4个顶点坐标box, 通过函数 cv2.cv.BoxPoints() 获得,box:[ [x0,y0], [x1,y1], [x2,y2], [x3,y3] ]
最小外接矩形的4个顶点顺序、中心坐标、宽度、高度、旋转角度(是度数形式,不是弧度数)的对应关系如下:
注:当数据
该函数计算并返回指定点集的最小区域边界矩形(可能旋转)。 开发人员应该记住,当数据接近包含的Mat元素边界时,返回的RotatedRect可以包含负索引。
。
OpenCV 学习笔记03 boundingRect、minAreaRect、minEnclosingCircle 函数的用法
原文:https://www.cnblogs.com/gengyi/p/10317664.html