opencv实现巴特沃斯低通滤波器 python
时间: 2024-04-27 15:18:10 浏览: 169
巴特沃斯低通滤波器是一种常用的频率域滤波器,可以在图像处理中用于平滑图像、去除高频噪声并保留更多的图像细节。在Python中,可以使用OpenCV库来实现巴特沃斯低通滤波器。
下面是一个使用OpenCV实现巴特沃斯低通滤波器的示例代码[^1]:
```python
import cv2
import numpy as np
def butterworth_lowpass_filter(image, cutoff_frequency, order):
# 获取图像的尺寸
rows, cols = image.shape
# 创建一个与输入图像相同尺寸的零矩阵
mask = np.zeros((rows, cols), dtype=np.float32)
# 计算中心点坐标
center_x = int(cols / 2)
center_y = int(rows / 2)
# 根据巴特沃斯低通滤波器的公式计算滤波器值
for i in range(rows):
for j in range(cols):
distance = np.sqrt((i - center_y) ** 2 + (j - center_x) ** 2)
mask[i, j] = 1 / (1 + (distance / cutoff_frequency) ** (2 * order))
# 将滤波器应用于输入图像的傅里叶变换
fft_image = np.fft.fft2(image)
fft_shift = np.fft.fftshift(fft_image)
filtered_shift = fft_shift * mask
filtered_image = np.fft.ifftshift(filtered_shift)
filtered_image = np.fft.ifft2(filtered_image)
filtered_image = np.abs(filtered_image)
return filtered_image
# 读取输入图像
image = cv2.imread('input.jpg', 0)
# 设置巴特沃斯低通滤波器的截止频率和阶数
cutoff_frequency = 30
order = 2
# 应用巴特沃斯低通滤波器
filtered_image = butterworth_lowpass_filter(image, cutoff_frequency, order)
# 显示原始图像和滤波后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Filtered Image', filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
请注意,上述代码中的`input.jpg`是输入图像的文件名,你需要将其替换为你自己的图像文件名。此外,你还可以根据需要调整截止频率和阶数来控制滤波效果。
阅读全文