python不调用库函数对图像进行中值滤波
时间: 2023-05-28 11:01:47 浏览: 136
以下是一个python程序示例,可以实现中值滤波操作:
```python
import cv2
import numpy as np
# 定义中值滤波函数
def median_filter(img, kernel_size):
# 获取图像的行数和列数
row, col = img.shape[:2]
# 创建一个与原图像大小相同的新图像
new_img = np.zeros((row, col), dtype=np.uint8)
# 计算卷积核的一半大小
half_kernel_size = kernel_size // 2
# 对图像进行中值滤波操作
for i in range(half_kernel_size, row - half_kernel_size):
for j in range(half_kernel_size, col - half_kernel_size):
# 获取当前像素周围的所有像素值
window = img[i - half_kernel_size:i + half_kernel_size + 1, j - half_kernel_size:j + half_kernel_size + 1].flatten()
# 求中值并将结果赋值给新图像的当前像素
new_img[i, j] = np.median(window)
return new_img
if __name__=="__main__":
# 读取图像并显示
img = cv2.imread("test.jpg", cv2.IMREAD_GRAYSCALE)
cv2.imshow('Original Image', img)
# 对图像进行中值滤波操作
result = median_filter(img, kernel_size=3)
# 显示滤波后的图像
cv2.imshow('Filtered Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在该程序中,`median_filter` 函数接收一个图像和卷积核大小作为输入参数。然后,在函数中,我们使用两个嵌套的 for 循环遍历图像中的每个像素,并在每个像素周围的指定区域内计算中值。最后,将计算得到的中值赋值给新图像的相应像素,并将其返回。在程序的主函数中,我们读取并显示原始图像,并通过 `median_filter` 函数进行中值滤波操作。最后,我们显示滤波后的图像。
阅读全文