使用python将图片转为二维灰度图,然后使用过滤器对图像进行卷积,卷积类型为same,卷积核大小为3×3,输出灰度图,和卷积后的特征图,并可视化完整代码
时间: 2024-09-22 07:09:13 浏览: 68
在Python中,我们可以使用`PIL`库处理图像,`numpy`进行数值计算,以及`matplotlib`进行可视化。这里是一个简单的例子,展示如何将彩色图像转换为灰度图像,然后应用3x3的卷积滤波器:
```python
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
# 加载图片
img = Image.open('input_image.jpg') # 替换为你需要处理的图片路径
rgb_img = np.array(img)
# 转换为灰度图
gray_img = rgb_img.mean(axis=-1) if len(rgb_img.shape) == 3 else rgb_img # 对于单通道和三通道图像分别处理
# 定义3x3的卷积核(这里的卷积核一般包含一些预设的滤波器如Sobel、Laplacian等)
kernel = np.array([[1, 1, 1], [1, -8, 1], [1, 1, 1]])
# 卷积操作(使用valid模式,边缘填充0)
convolved_img = np.zeros_like(gray_img)
for i in range(1, gray_img.shape[0] - 1):
for j in range(1, gray_img.shape[1] - 1):
convolved_img[i][j] = (gray_img[i:i+3, j:j+3] * kernel).sum()
# 将结果转换回Image对象并显示原始灰度图和卷积后的特征图
gray_img = Image.fromarray(gray_img.astype('uint8'))
conv_img = Image.fromarray((convolved_img * 255).astype('uint8'))
plt.subplot(121), plt.imshow(gray_img, cmap='gray')
plt.title('Original Gray Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(conv_img, cmap='gray')
plt.title('Convolved Image'), plt.xticks([]), plt.yticks([])
plt.show()
阅读全文