sobel算子python实现
时间: 2023-10-22 17:07:30 浏览: 135
八方向Sobel算子(3x3)的python实现
Sobel算子是一种常用的边缘检测算法,可以在图像中寻找水平和垂直的边缘。下面是一份Python实现的代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test.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)
grad_dir = np.arctan2(grad_y, grad_x)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Gradient X', grad_x)
cv2.imshow('Gradient Y', grad_y)
cv2.imshow('Gradient', grad)
cv2.imshow('Gradient Direction', grad_dir)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
首先读取图像,然后定义Sobel算子。接着,使用`cv2.filter2D()`函数计算x方向和y方向的梯度。最后,通过计算梯度的幅值和方向,可以得到边缘图像和边缘方向图像。
阅读全文