contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) img_bgr = cv2.cvtColor(imm, cv2.COLOR_GRAY2BGR) # 绘制边缘 # imm = cv2.drawContours(img_bgr, contours, -1, (0, 0, 255), 1) # 遍历轮廓 rects = [] for contour in contours: rect = cv2.minAreaRect(contour) rects.append(rect) box = cv2.boxPoints(rect) box = np.int0(box) cv2.drawContours(img_bgr, [box], 0, (0, 0, 255), 2) for i, rect in enumerate(sorted(rects, key=lambda x: x[1][0] * x[1][1], reverse=True)): print(f'Rank {i + 1}: Size={rect[1][0] * rect[1][1]:.0f}, ({int(rect[0][0])}, {int(rect[0][1])}), Width={rect[1][0]:.0f}, Height={rect[1][1]:.0f}, Angle={rect[2]:.0f}')打印的具体是什么帮我再加上矩形轮廓的四个角的坐标也是按矩形大小排名打印
时间: 2024-01-16 19:02:42 浏览: 53
这段代码主要是使用 OpenCV 对图像进行轮廓检测,并对检测到的轮廓进行排序和处理。
具体来说,代码首先使用 cv2.findContours() 函数对二值化后的图像进行轮廓检测,返回检测到的轮廓列表和轮廓层级信息。然后将灰度图转换为彩色图像(cv2.cvtColor()),并使用 cv2.drawContours() 函数将检测到的轮廓绘制到图像上。
接下来,代码遍历轮廓列表,并利用 cv2.minAreaRect() 函数对每个轮廓进行最小外接矩形计算,将得到的矩形信息存储到 rects 列表中。然后对 rects 列表中的矩形按照面积进行排序,并使用 cv2.boxPoints() 函数将每个矩形转换成四个角的坐标,最后使用 cv2.drawContours() 函数将矩形绘制到图像上。
最后,代码打印每个矩形的排名、面积、中心点坐标、宽度、高度和旋转角度等信息。如果需要在打印信息时加上矩形轮廓的四个角的坐标,可以在打印信息的时候加上 box 变量,例如:
```
for i, rect in enumerate(sorted(rects, key=lambda x: x[1][0] * x[1][1], reverse=True)):
box = cv2.boxPoints(rect)
box = np.int0(box)
print(f'Rank {i + 1}: Size={rect[1][0] * rect[1][1]:.0f}, ({int(rect[0][0])}, {int(rect[0][1])}), Width={rect[1][0]:.0f}, Height={rect[1][1]:.0f}, Angle={rect[2]:.0f}, Corners={box}')
```
阅读全文