opencv 提取轮廓中的孔洞
时间: 2023-09-24 14:01:14 浏览: 61
在OpenCV中,提取轮廓中的孔洞主要使用的是findContours()函数和drawContours()函数。首先,使用findContours()函数提取图像中的轮廓信息,并储存在一个列表中。然后,通过判断轮廓的层级关系,可以找出孔洞的轮廓。最后,使用drawContours()函数将孔洞的轮廓画在图像上。
具体步骤如下:
1. 将图像转换为灰度图像,并进行二值化处理。
2. 使用findContours()函数找到图像中的所有轮廓,将其储存在一个列表中。
3. 遍历轮廓列表,使用hierarchy参数判断轮廓的层级关系。如果轮廓的下一级轮廓存在,则说明该轮廓是一个外轮廓,如果没有下一级轮廓,则说明该轮廓是一个孔洞。
4. 将孔洞的轮廓画在图像上,可以设置绘制的线条颜色和粗细等参数。
5. 显示图像并保存结果。
以下是一个简单的代码示例:
import cv2
import numpy as np
# 读取图像
img = cv2.imread("image.jpg", 0)
# 二值化处理
ret, binary = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# 提取轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 遍历轮廓列表,绘制孔洞轮廓
for i in range(len(contours)):
if hierarchy[0][i][3] == -1:
cv2.drawContours(img, contours, i, (0, 0, 255), 2)
# 显示图像并保存结果
cv2.imshow("Contours", img)
cv2.waitKey(0)
cv2.destroyAllWindows()