OpenCV implémente la transformée de Fourier et la transformée inverse

Présentation Pi : 

Résultat renvoyé = cv2.dft (image d'origine, logo converti)

Résultat de retour : il est à double canal, le premier canal est la partie réelle du résultat et le second canal est la partie imaginaire du résultat
Image d'origine : l'image d'entrée doit d'abord être convertie au format np.float32, np.float32 (img)
indicateur de conversion : flags = cv2.DFT_COMPLEX_OUTPUT, génère un tableau complexe

 

partie de code :

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()

 

Effet. .

Transformée de Fourier inverse Opencv :

code:

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()

 Effet:

Je suppose que tu aimes

Origine blog.csdn.net/chehec2010/article/details/129900568
conseillé
Classement