提取内边界、外边界和形态学梯度的边界
时间: 2024-03-15 21:42:27 浏览: 133
好的,我可以在前面的代码基础上稍作修改来实现提取边界的功能。以下是代码示例:
```python
import cv2
# 读取图像
img = cv2.imread('image/coins.png')
# 灰度化处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
edges = cv2.Canny(gray, 100, 200)
# 膨胀操作
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
dilated = cv2.dilate(edges, kernel)
# 腐蚀操作
eroded = cv2.erode(edges, kernel)
# 形态学梯度
gradient = cv2.morphologyEx(edges, cv2.MORPH_GRADIENT, kernel)
# 提取内边界
inner_contours, _ = cv2.findContours(eroded, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
inner_boundary = cv2.drawContours(img, inner_contours, -1, (0, 0, 255), 2)
# 提取外边界
outer_contours, _ = cv2.findContours(dilated, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
outer_boundary = cv2.drawContours(img, outer_contours, -1, (0, 255, 0), 2)
# 提取形态学梯度边界
gradient_contours, _ = cv2.findContours(gradient, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
gradient_boundary = cv2.drawContours(img, gradient_contours, -1, (255, 0, 0), 2)
# 显示图像
cv2.imshow('Original Image', img)
cv2.imshow('Inner Boundary', inner_boundary)
cv2.imshow('Outer Boundary', outer_boundary)
cv2.imshow('Gradient Boundary', gradient_boundary)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
运行以上代码,我们可以得到三个边界的提取结果:内边界、外边界和形态学梯度边界。其中,内边界可以通过先膨胀再腐蚀的操作得到;外边界可以通过先腐蚀再膨胀的操作得到;形态学梯度边界可以通过使用`cv2.drawContours()`函数和`cv2.findContours()`函数来实现。在`cv2.drawContours()`函数中,我们需要指定要绘制轮廓的图像,找到的轮廓,轮廓的索引(-1表示绘制所有轮廓),线条颜色和线条宽度等参数。
阅读全文
相关推荐


















