OpenCV轮廓最大内接矩形(带角度)
时间: 2023-08-08 11:06:11 浏览: 381
要获取轮廓的最大内接矩形,可以使用OpenCV中的minAreaRect函数。该函数可以返回一个包含轮廓的最小矩形区域,包括矩形的中心点坐标、长宽以及旋转角度。具体实现步骤如下:
1. 读取图像并进行灰度转换和二值化处理。
```python
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
```
2. 查找轮廓并筛选出最大轮廓。
```python
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
max_contour = max(contours, key=cv2.contourArea)
```
3. 获取最大内接矩形的信息,并绘制出来。
```python
rect = cv2.minAreaRect(max_contour)
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (0, 0, 255), 2)
```
其中,boxPoints函数可以将最小矩形的四个顶点坐标返回为一个数组,np.int0函数可以将浮点数转换为整型。最后,使用drawContours函数将最小矩形绘制在原图上。
完整代码如下:
```python
import cv2
import numpy as np
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
max_contour = max(contours, key=cv2.contourArea)
rect = cv2.minAreaRect(max_contour)
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img, [box], 0, (0, 0, 255), 2)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
注意:在使用findContours函数时,返回的轮廓列表类型可能会发生变化,需要根据OpenCV版本进行相应的调整。
阅读全文