opencv 正矩形
时间: 2023-11-02 07:07:10 浏览: 61
要找到一张图片中的正矩形,可以使用OpenCV中的边缘检测和轮廓检测来实现。
以下是一个大致的步骤:
1. 读取图片并将其转换为灰度图像。
2. 使用Canny边缘检测算法来检测图像中的边缘。
3. 对图像进行膨胀和腐蚀操作以减少噪声。
4. 使用轮廓检测算法来检测轮廓,并将所有的轮廓存储在一个列表中。
5. 遍历轮廓列表,并找到包含四个点的轮廓(即正矩形)。
6. 绘制矩形。
以下是一个示例代码:
```python
import cv2
# 读取图片
img = cv2.imread('image.jpg')
# 将图片转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用Canny边缘检测算法
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
# 膨胀和腐蚀操作
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
dilated = cv2.dilate(edges, kernel)
eroded = cv2.erode(dilated, kernel)
# 轮廓检测
contours, hierarchy = cv2.findContours(eroded, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓列表
for contour in contours:
# 计算轮廓的周长
perimeter = cv2.arcLength(contour, True)
# 近似轮廓
approx = cv2.approxPolyDP(contour, 0.02 * perimeter, True)
# 如果近似轮廓包含四个点,则绘制矩形
if len(approx) == 4:
cv2.drawContours(img, [approx], 0, (0, 255, 0), 2)
# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中 `cv2.approxPolyDP` 函数用于近似轮廓,可以通过调整第二个参数的值来控制近似的精度。在本例中,我们使用了 2% 的周长误差容忍度。
阅读全文