使用python将图片转为二维灰度图,然后使用过滤器对图像进行卷积,卷积类型为same,卷积核大小为3×3,输出灰度图,和卷积后的特征图,并可视化
时间: 2024-09-23 12:01:40 浏览: 40
在Python中,我们可以使用PIL库处理图像并使用NumPy和OpenCV进行卷积操作。以下是步骤:
1. 首先安装所需的库,如果你还没有安装,可以运行:
```bash
pip install pillow numpy opencv-python
```
2. 导入必要的模块:
```python
from PIL import Image
import numpy as np
import cv2
```
3. 加载图片并转换为灰度图:
```python
def load_and_convert(image_path):
img = Image.open(image_path)
gray_img = img.convert('L') # 'L'表示灰度模式
return np.array(gray_img)
gray_image = load_and_convert("your_image_path.jpg")
```
4. 创建一个3x3的卷积核,通常用于边缘检测等简单任务,比如Sobel算子:
```python
kernel = np.array([[1, 1, 1],
[0, 0, 0],
[-1, -1, -1]], dtype=np.float32) / 8 # 归一化卷积核
```
5. 对灰度图进行卷积,保持原始尺寸(same padding),这会用零填充到图像边缘:
```python
def convolve_same(gray_img, kernel):
height, width = gray_img.shape[:2]
output = cv2.filter2D(gray_img, -1, kernel, borderType=cv2.BORDER_CONSTANT, borderValue=0)
return output
convolved_img = convolve_same(gray_image, kernel)
```
6. 可视化原始灰度图和卷积后的特征图:
```python
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1), plt.imshow(gray_image, cmap='gray')
plt.title('Original Gray Scale Image'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.imshow(convolved_img, cmap='gray')
plt.title('Convolved Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
这里的`imshow`函数用于显示图像,每个子图代表输入灰度图和卷积结果。
阅读全文