可以写一个Python程序,输入一张图片,实现sobel边缘检测算法,并调用sobel函数,输出两种方法的结果图片
时间: 2024-06-10 16:04:42 浏览: 10
当然可以实现!以下是Python代码:
```python
import numpy as np
from PIL import Image, ImageOps
# Sobel边缘检测算法
def sobel(img):
# 图像灰度化
img_gray = img.convert('L')
# 图像矩阵化
img_array = np.array(img_gray)
# 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 = conv(img_array, sobel_x)
grad_y = conv(img_array, sobel_y)
# 计算梯度幅值
grad = np.sqrt(grad_x ** 2 + grad_y ** 2)
# 标准化
grad_norm = grad / np.max(grad) * 255
grad_norm = grad_norm.astype('uint8')
return Image.fromarray(grad_norm)
# 卷积函数
def conv(img, kernel):
# 卷积核大小
h, w = kernel.shape
# 图像大小
img_h, img_w = img.shape
# 边框宽度
pad = h // 2
# 扩充图片
img_pad = np.zeros((img_h + pad * 2, img_w + pad * 2))
img_pad[pad:-pad, pad:-pad] = img
# 卷积操作
img_conv = np.zeros((img_h, img_w))
for i in range(pad, img_h + pad):
for j in range(pad, img_w + pad):
roi = img_pad[i - pad:i + pad + 1, j - pad:j + pad + 1]
img_conv[i - pad, j - pad] = np.sum(roi * kernel)
return img_conv
# 加载图片
img = Image.open('source_img.jpg')
# 执行Sobel边缘检测算法
img_sobel = sobel(img)
# 反转颜色
img_sobel = ImageOps.invert(img_sobel)
# 显示结果
img_sobel.show()
```
在执行此代码之前,需要先安装所需Python库(Pillow和numpy)。以Ubuntu为例,可以使用以下命令进行安装:
```bash
sudo apt-get install python-pil
sudo apt-get install python-numpy
```
注意:由于边缘检测结果具有很高的对比度,因此在运行结果中看不到明显的效果。你可以尝试更换不同的图片进行测试。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)