opencv傅里叶变换python低通滤波
时间: 2024-11-29 22:15:52 浏览: 18
OpenCV(开源计算机视觉库)提供了对图像处理中的傅立叶变换功能的支持,包括离散傅立叶变换(DFT)和快速傅立叶变换(FFT)。在Python中,你可以使用OpenCV的`cv2.dft()`函数来进行傅立叶变换。
对于低通滤波,通常的做法是在频域中应用一个高斯模糊或者其他平滑滤波器,然后取其逆变换回到空间域。这样可以去除高频噪声,留下较低频率的内容,即我们想要保留的图像细节。例如,你可以创建一个二维高斯核(gaussian kernel),然后对该核做傅立叶变换,接着将输入图像的频谱与该高斯核点乘,最后再进行逆傅立叶变换得到低通滤波后的图像。
以下是一个简单的示例:
```python
import cv2
import numpy as np
# 加载图像
img = cv2.imread('image.jpg', 0) # 灰度图
# 对图像进行离散傅立叶变换
dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
# 创建高斯滤波核
kernel_size = 5
sigma = 1.5
gaussian_kernel = cv2.getGaussianKernel(kernel_size, sigma)
# 将滤波器应用于频谱
filtered_dft = dft_shift * gaussian_kernel
# 取逆变换并归一化
filtered_img = cv2.idft(filtered_dft)
filtered_img = cv2.magnitude(filtered_img[:,:,0], filtered_img[:,:,1])
# 结果通常为复数,需要取模得到灰度图像
result = cv2.convertScaleAbs(filtered_img)
# 显示原始和处理后的图像
cv2.imshow("Original", img)
cv2.imshow("Low-pass Filtered", result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文