利用Sobel边缘检测算子编程实现边缘检测
时间: 2023-10-22 08:06:07 浏览: 100
以下是Python实现Sobel边缘检测算子的示例代码:
```python
import cv2
import numpy as np
# 读取图片
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
# Sobel算子
sobel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])
sobel_y = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])
# 计算x方向和y方向的梯度
grad_x = cv2.filter2D(img, -1, sobel_x)
grad_y = cv2.filter2D(img, -1, sobel_y)
# 计算梯度幅值
grad = np.sqrt(grad_x ** 2 + grad_y ** 2)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Sobel X', grad_x)
cv2.imshow('Sobel Y', grad_y)
cv2.imshow('Sobel', grad)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该代码首先读取了一张灰度图像,然后定义了Sobel算子的卷积核,分别计算了x方向和y方向的梯度,最后计算了梯度幅值,并将结果显示出来。
需要注意的是,这里使用了OpenCV的filter2D函数来进行卷积运算,其中的参数-1表示输出图像与输入图像具有相同的数据类型和通道数。此外,还需要使用numpy库中的sqrt函数来计算梯度幅值。
阅读全文