3)生成3×3、5×5、9×9、15×15和35×35的均值模板,对图像’specialFilter_test.tif’进行滤波,比较不同模板大小的滤波效果。要求将原图和滤波后的图像显示在同一个图像窗口中。
时间: 2024-11-30 14:30:00 浏览: 18
在Python的OpenCV库中,你可以通过`cv2.getGaussianKernel()`或`cv2.createMorphologyEx()`来生成不同尺寸的高斯滤波模板。对于均值滤波,虽然OpenCV默认的内核是3x3,但我们可以手动创建任意尺寸的模板。以下是一个简单的示例,展示如何生成并应用不同尺寸的模板到'specialFilter_test.tif'上:
首先,你需要安装OpenCV库(如果还没有安装):
```bash
pip install opencv-python
```
然后,你可以使用以下代码片段:
```python
import cv2
import numpy as np
# 读取原始图像
image = cv2.imread('specialFilter_test.tif', cv2.IMREAD_GRAYSCALE)
# 定义不同尺寸的模板
sizes = [(3, 3), (5, 5), (9, 9), (15, 15), (35, 35)]
kernels = [np.ones(size, dtype=np.float32) / (size[0] * size[1]) for size in sizes]
# 应用均值滤波
filtered_images = []
for kernel in kernels:
filtered_image = cv2.filter2D(image, -1, kernel)
filtered_images.append(filtered_image)
# 将原图和滤波后的结果放入同一窗口显示
fig, axs = plt.subplots(nrows=len(sizes), ncols=2, figsize=(10, 4*len(sizes)), sharey=True)
axs[0][0].imshow(image, cmap='gray')
axs[0][0].set_title('Original')
for i, ax_row in enumerate(axs):
ax_row[0].imshow(filtered_images[i], cmap='gray')
ax_row[0].set_title(f'Filtered ({sizes[i][0]}x{sizes[i][1]})')
# 显示原始和处理后的对比
ax_row[1].imshow(cv2.addWeighted(image, 0.7, filtered_images[i], 0.3, 0), cmap='gray')
ax_row[1].set_title(f'Comparison ({sizes[i][0]}x{sizes[i][1]})')
plt.tight_layout()
plt.show()
```
在这个例子中,我们首先读取了灰度图像,然后生成了不同尺寸的均值滤波模板。然后,我们分别用这些模板进行滤波,并将原图和滤波后的图像以及它们的对比显示在同一窗口中,以便比较不同尺寸的效果。
阅读全文