opencv频域滤波
时间: 2023-11-08 21:03:31 浏览: 126
OpenCV实现频域滤波简单示例
opencv中的频域滤波使用傅里叶变换(FFT)进行操作。以下是一些常见的频域滤波操作:
1. 频域低通滤波:通过去除高频部分来平滑图像,常用的方法有理想低通滤波、巴特沃斯低通滤波和高斯低通滤波。
2. 频域高通滤波:通过去除低频部分来增强图像的边缘和细节,常用的方法有理想高通滤波、巴特沃斯高通滤波和高斯高通滤波。
3. 频域带通滤波:通过保留一定频率范围内的信息来增强图像的某些频率成分。
在OpenCV中,可以使用dft函数进行傅里叶变换,使用idft函数进行逆变换。可以使用getOptimalDFTSize函数来获取最佳尺寸。下面是一个示例代码,演示如何进行频域滤波:
```python
import cv2
import numpy as np
# 读取图像
image = cv2.imread('image.jpg', 0)
# 将图像转换为频域
dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
# 创建一个掩模,中心为1,其余为0
rows, cols = image.shape
mask = np.zeros((rows, cols, 2), np.uint8)
mask[int(rows/2)-30:int(rows/2)+30, int(cols/2)-30:int(cols/2)+30] = 1
# 应用滤波器
dft_shift = dft_shift * mask
# 将频域图像转换回空域图像
f_ishift = np.fft.ifftshift(dft_shift)
image_filtered = cv2.idft(f_ishift)
image_filtered = cv2.magnitude(image_filtered[:, :, 0], image_filtered[:, :, 1])
# 显示原始图像和滤波后的图像
cv2.imshow('Original', image)
cv2.imshow('Filtered', image_filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文