opencv 傅里叶变换
时间: 2023-10-05 07:08:34 浏览: 109
openCV傅里叶变换及逆变换实现代码
OpenCV中的傅里叶变换可以通过cv.dft()函数来实现。该函数的参数包括输入图像、输出图像、标志和非零行数。
下面是一个使用OpenCV进行傅里叶变换的代码示例:
```
from matplotlib import pyplot as plt
import numpy as np
import cv2 as cv
img = cv.imread('C:\\Users\\dell\\Desktop\\prac files\\prac1.jpg')
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
f = np.fft.fft2(img_gray)
f_shift = np.fft.fftshift(f)
f_shift_log = 20*np.log(np.abs(f_shift))
rows, cols = img_gray.shape
crow, ccol = rows//2 , cols//2
f_shift[crow-30:crow+31, ccol-30:ccol+31 = 0
f_ishift = np.fft.ifftshift(f_shift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.real(img_back)
plt.subplot(1, 3, 1)
plt.imshow(img_gray, cmap="gray")
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 3, 2)
plt.imshow(f_shift_log, cmap="gray")
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 3, 3)
plt.imshow(img_back, cmap="gray")
plt.title('Result in JET'), plt.xticks([]), plt.yticks([])
plt.show()
```
在这个代码示例中,我们首先读取了一张图像,并将其转换为灰度图像。然后,我们使用np.fft.fft2()函数对图像进行傅里叶变换,并使用np.fft.fftshift()函数将频率分量移动到图像中心。接下来,我们对频率分量进行处理,将中心区域的频率设置为0,然后再使用np.fft.ifftshift()函数将频率分量移回原来的位置。最后,我们使用np.fft.ifft2()函数对处理后的频率分量进行逆傅里叶变换,并使用plt.imshow()函数显示原始图像、频率谱和结果图像。
需要注意的是,对于某些数组尺寸,DFT的计算性能较好。当数组大小为2的幂时,速度最快。对于大小为2、3和5的乘积的数组,也可以非常有效地进行处理。如果对性能有所担忧,可以在进行DFT之前将数组大小修改为最佳大小(通过填充零)。在OpenCV中,可以使用cv.getOptimalDFTSize()函数来获取最佳大小,并手动填充零。而在Numpy中,可以直接指定FFT计算的新大小,它将自动填充零。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [OpenCV傅里叶变换](https://blog.csdn.net/weixin_44796581/article/details/120049339)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文