如何从contour中提取轮廓的四个角点坐标
时间: 2023-11-09 21:05:37 浏览: 209
从轮廓中提取四个角点坐标的方法有很多,这里介绍一种基于cv2.convexHull()函数的方法。
1. 导入所需的库:
```python
import cv2
import numpy as np
```
2. 读取图像并进行灰度化和二值化处理:
```python
img = cv2.imread('qrcode.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
```
3. 查找轮廓:
```python
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
```
4. 对每个轮廓进行处理:
```python
for cnt in contours:
# 获取凸包
hull = cv2.convexHull(cnt)
# 获取四个角点
points = cv2.boxPoints(cv2.minAreaRect(hull))
# 绘制四边形
cv2.drawContours(img, [points.astype(int)], -1, (0, 0, 255), 2)
```
这里使用了 cv2.convexHull() 函数获取轮廓的凸包,然后使用 cv2.minAreaRect() 函数获取最小外接矩形,最后使用 cv2.boxPoints() 函数获取矩形的四个角点坐标。最后,使用 cv2.drawContours() 函数绘制四边形。
5. 显示图像:
```python
cv2.imshow('contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这里使用了 cv2.imshow() 函数来显示图像,cv2.waitKey(0) 函数等待用户按下任意键后关闭窗口,cv2.destroyAllWindows() 函数用于关闭所有窗口。
完整代码如下:
```python
import cv2
import numpy as np
img = cv2.imread('qrcode.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
hull = cv2.convexHull(cnt)
points = cv2.boxPoints(cv2.minAreaRect(hull))
cv2.drawContours(img, [points.astype(int)], -1, (0, 0, 255), 2)
cv2.imshow('contours', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
执行完该代码后,您将会看到一个带有四个角点的四边形的图像。
阅读全文