对一幅二值图像,采用不同大小和形状的结构元提取边缘,显示结果;使用梯 度的方法对同一幅图像提取边缘,将这两种应用不同方法的结果进行显示比较python代码
时间: 2024-02-12 22:09:37 浏览: 38
以下是使用不同结构元提取边缘的Python代码示例:
```python
import cv2
import numpy as np
# 读取二值图像
img = cv2.imread('binary_image.png', 0)
# 定义不同大小和形状的结构元素
kernel1 = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
kernel2 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
kernel3 = cv2.getStructuringElement(cv2.MORPH_CROSS, (7, 7))
# 使用不同结构元素提取边缘
edge1 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel1)
edge2 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel2)
edge3 = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel3)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Edge with Rect Kernel', edge1)
cv2.imshow('Edge with Ellipse Kernel', edge2)
cv2.imshow('Edge with Cross Kernel', edge3)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以下是使用梯度方法提取边缘的Python代码示例:
```python
import cv2
import numpy as np
# 读取灰度图像
img = cv2.imread('gray_image.png', 0)
# 使用Sobel算子计算梯度
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
grad = cv2.magnitude(sobelx, sobely)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Gradient Image', grad.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以上两段代码的输出结果可以进行比较,以查看不同方法提取边缘的效果。