OpenCVはフーリエ変換と逆変換を実装します

パイの紹介: 

戻り結果 = cv2.dft (元の画像、変換されたロゴ)

返される結果: デュアルチャネルであり、最初のチャネルは結果の実数部、2 番目のチャネルは結果の虚数部です 元の画像: 入​​力画像はまず np.float32 形式、np.float32 に変換する必要があり
ます(img)
変換フラグ: flags = cv2.DFT_COMPLEX_OUTPUT、複素数配列を出力

 

コード部分:

import numpy as np
import cv2    #opencv-python
import matplotlib.pyplot as plt

img = cv2.imread("../images/chenqiaoen.jpg",0)
#dft函数傅里叶变换
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
#移动左上角低频到图像中心
dftShift = np.fft.fftshift(dft)
#傅里叶变换结果是双通道,我们需要把双通道转换为三通道灰度图像,20*转换到0-255的图像
result = 20*np.log(cv2.magnitude(dftShift[:,:,0],dftShift[:,:,1]))

plt.subplot(121)
plt.imshow(img,cmap="gray")
plt.title("original")
plt.axis("off")

plt.subplot(122)
plt.imshow(result,cmap = "gray")
plt.title("result")
plt.axis("off")
plt.show()

 

効果。

OpenCV逆フーリエ変換:

コード:

import numpy as np
import cv2    #opencv-python
import matplotlib.pyplot as plt

img = cv2.imread("../images/chenqiaoen.jpg",0)
#dft函数傅里叶变换
dft = cv2.dft(np.float32(img),flags = cv2.DFT_COMPLEX_OUTPUT)
#移动左上角低频到图像中心
dftShift = np.fft.fftshift(dft)
#再从中间移动低频左上角
ishift = np.fft.ifftshift(dftShift)
#傅里叶逆变换
iImg=cv2.idft(ishift)
#需要把2通道的转换为三通道的灰度图像,转换成8位的位图
iOmg=cv2.magnitude(iImg[:,:,0],iImg[:,:,1]);


plt.subplot(121)
plt.imshow(img,cmap="gray")
plt.title("original")
plt.axis("off")

plt.subplot(122)
plt.imshow(iOmg,cmap = "gray")
plt.title("reverse")
plt.axis("off")
plt.show()

 効果:

おすすめ

転載: blog.csdn.net/chehec2010/article/details/129900568