怎么把相邻距离小于5的contours合并成一个大的矩形contours
时间: 2024-05-12 11:16:28 浏览: 19
可以使用OpenCV中的cv2.boundingRect()函数来获取contours的矩形区域,然后检查相邻的矩形区域是否距离小于5,如果是则将它们合并成一个大的矩形区域,最终将所有的矩形区域合并成一个contour。
下面是一个示例代码:
```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)
# 查找contours
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 合并相邻的contours
merged_contours = []
for i in range(len(contours)):
# 获取第i个contour的矩形区域
x, y, w, h = cv2.boundingRect(contours[i])
merged = False
for j in range(len(merged_contours)):
# 获取已合并的contour的矩形区域
x1, y1, w1, h1 = cv2.boundingRect(merged_contours[j])
# 如果相邻则合并
if abs(x - x1) < 5 and abs(y - y1) < 5:
merged_contours[j] = cv2.convexHull(np.concatenate((merged_contours[j], contours[i])))
merged = True
break
# 如果不相邻则添加到已合并的contours列表中
if not merged:
merged_contours.append(contours[i])
# 绘制合并后的contours
merged_img = np.zeros_like(img)
for contour in merged_contours:
cv2.drawContours(merged_img, [contour], -1, (255, 255, 255), -1)
cv2.imshow('Merged Contours', merged_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
上述代码中,我们首先使用cv2.boundingRect()函数获取每个contour的矩形区域。然后,我们循环遍历所有的contours,检查它们是否与已合并的contours相邻,如果相邻则将它们合并成一个大的contour。最后,我们绘制合并后的contours并显示它们。