TypeError:不支持src数据类型= 15

时间:2015-06-22 21:12:29

标签: python opencv numpy fft ifft

我想使用快速傅里叶变换,但已经尝试过简单的来回转换不起作用。代码是

import cv2
import numpy as np

img = cv2.imread('Picture.bmp',0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])

,错误是

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    img_back = cv2.idft(f_ishift)
TypeError: src data type = 15 is not supported

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我想我明白了。 cv2.idft()想要不同格式的复数。我必须分别提取实部和虚部,并将它们写在第三维:

import cv2
import numpy as np

img = cv2.imread('Bild.bmp',0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
f_ishift = np.fft.ifftshift(fshift)
d_shift = np.array(np.dstack([f_ishift.real,f_ishift.imag]))
img_back = cv2.idft(d_shift)
img = cv2.magnitude(img_back[:,:,0],img_back[:,:,1])

答案 1 :(得分:-1)

有时它想要一个绝对值返回所以你可以使用:np.abs()