box = cv2.boxPoints(rect)
时间: 2024-03-18 16:44:29 浏览: 45
cv2.boxPoints函数是用于将旋转矩形转换为矩形的四个顶点坐标的函数,其中的rect是一个旋转矩形。该函数会返回一个矩阵,其中包含了旋转矩形的四个顶点坐标。
具体来说,cv2.boxPoints函数会将旋转矩形转换为矩形的四个顶点坐标,并存储在一个矩阵中。这四个顶点坐标可以用来绘制矩形、计算矩形的面积和周长等属性。返回值box是一个包含四个点坐标的矩阵,每行代表一个点的坐标,依次是左上、右上、右下、左下四个点。
因此,cv2.boxPoints函数可以方便地将旋转矩形转换为矩形的四个顶点坐标,以便后续的处理和分析。
相关问题
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}, Centre=({int(rect[0][0])}, {int(rect[0][1])}), Width={rect[1][0]:.0f}, Height={rect[1][1]:.0f}, Angle={rect[2]:.0f}, \nCorners={box}')改为只打印排名前三的
可以在循环中添加一个计数器变量,用来记录已经打印的矩形数量,当数量达到3时退出循环即可。修改后的代码如下:
```
count = 0
for i, rect in enumerate(sorted(rects, key=lambda x: x[1][0] * x[1][1], reverse=True)):
if count >= 3:
break
box = cv2.boxPoints(rect)
box = np.int0(box)
print(f'Rank {i + 1}: Size={rect[1][0] * rect[1][1]:.0f}, Centre=({int(rect[0][0])}, {int(rect[0][1])}), Width={rect[1][0]:.0f}, Height={rect[1][1]:.0f}, Angle={rect[2]:.0f}, \nCorners={box}')
count += 1
```
这样就只会打印排名前三的矩形信息了。
ret, thresh = cv2.threshold(imm, 127, 255, cv2.THRESH_BINARY) # 寻找图像中的边缘 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}, TopLeft=({int(rect[0][0])}, {int(rect[0][1])}), Width={rect[1][0]:.0f}, Height={rect[1][1]:.0f}, Angle={rect[2]:.0f}')将此代码中心点坐标改为角的坐标
要将中心点坐标改为角的坐标,只需要将代码中的 `rect[0]` 改为 `box[0]` 即可,修改后的代码如下:
```python
ret, thresh = cv2.threshold(imm, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
img_bgr = cv2.cvtColor(imm, cv2.COLOR_GRAY2BGR)
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}, TopLeft=({int(box[0][0])}, {int(box[0][1])}), Width={rect[1][0]:.0f}, Height={rect[1][1]:.0f}, Angle={rect[2]:.0f}')
```
阅读全文
相关推荐
















