# 获取最小外接矩形 rect = cv2.minAreaRect(outer_contours[max_index]) # 快速把rect转化为轮廓数据 box = cv2.boxPoints(rect) print(box) # 轮廓必须是整数, 不能是小数, 所以转化为整数 box = np.round(box).astype('int64') 如何求出外接矩形的长和宽
时间: 2024-03-12 20:43:43 浏览: 231
在 OpenCV 中,使用 `cv2.minAreaRect()` 函数可以获取包围轮廓的最小矩形。然后,使用 `cv2.boxPoints()` 函数将矩形转换为其顶点坐标。对于一个旋转矩形,其长和宽可以通过其宽度和高度来确定,可以使用以下代码计算:
```
rect = cv2.minAreaRect(outer_contours[max_index])
box = cv2.boxPoints(rect)
width = int(rect[1][0])
height = int(rect[1][1])
```
在上述代码中,`rect[1][0]` 表示矩形的宽度,`rect[1][1]` 表示矩形的高度,因此可以直接将这两个值转换为整数并分别赋值给 `width` 和 `height` 变量。
相关问题
rect = cv2.minAreaRect(cnt)#计算最小矩形区域 box = cv2.boxPoints(rect) box = np.int0(box)#浮点型转为整形
这段代码使用OpenCV中的函数来计算给定轮廓cnt的最小包围矩形区域,并将其转换为四个顶点坐标。
首先,cv2.minAreaRect函数接受一个轮廓作为输入,并计算出能够完全包围该轮廓的最小旋转矩形。返回的矩形是一个包含矩形中心坐标、宽度、高度和旋转角度的元组。
然后,使用cv2.boxPoints函数从最小矩形中提取出四个顶点的坐标。这些坐标是以浮点数形式返回的。
最后,通过使用np.int0函数将浮点数类型的顶点坐标转换为整型,以便后续的绘制和处理。
import cv2 import numpy as np def main(): # 1.导入图片 img_src = cv2.imread("cc.jpg") # 2.灰度化,二值化 img_gray = cv2.cvtColor(img_src, cv2.COLOR_BGR2GRAY) ret, img_bin = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY) # 3.连通域分析 img_bin, contours, hierarchy = cv2.findContours(img_bin, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) # 4.获取最小外接矩形并打印 min_rect = cv2.minAreaRect(contours[0]) print("返回值min_rect:\n", min_rect) rect_points = cv2.boxPoints(min_rect) print("返回值rect_points:\n", rect_points) rect_points = np.int0(rect_points) # 5.绘制最小外接矩形 img_result = img_src.copy() cv2.drawContours(img_result, [rect_points], 0, (255, 255, 255), 2) # 6.显示结果图片 cv2.imshow("img_src", img_src) cv2.imshow("img_result", img_result) cv2.waitKey() cv2.destroyAllWindows() if __name__ == '__main__': main()怎么把图像摆正
要将图像摆正,您可以使用cv2.warpAffine()函数。该函数使用变换矩阵将图像旋转、平移、缩放等转换。以下是一个示例,可以将最小外接矩形旋转到水平方向:
```python
# 计算旋转角度
angle = min_rect[2]
if angle < -45:
angle += 90
# 计算旋转中心
center = tuple(np.array(img_src.shape[1::-1]) / 2)
# 生成变换矩阵
M = cv2.getRotationMatrix2D(center, angle, 1)
# 应用变换矩阵
img_result_rotated = cv2.warpAffine(img_result, M, img_src.shape[1::-1], flags=cv2.INTER_CUBIC)
```
这将生成一个旋转后的图像img_result_rotated。您可以将其保存为图像文件并使用cv2.imshow()函数显示。
阅读全文