傅里叶变换为什么报错

import cv2
import numpy as np
from matplotlib import pyplot as plt

# OpenCV实现傅里叶逆变换

img = cv2.imread('C:\\Users\\86186\\Desktop\\DIP_Photo\\Lenna_RGB.tif', 1)

# 傅里叶变换
dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)  # 傅里叶变换库函数调用
dftshift = np.fft.fftshift(dft)  # 将傅里叶频域从左上角移动到中间
res1 = 20 * np.log(cv2.magnitude(dftshift[:, :, 0], dftshift[:, :, 1]))  # 双通道结果转换为0到255的范围用于图像显示

# 傅里叶逆变换
ishift = np.fft.ifftshift(dftshift)  # 将频域从中间移动到左上角
iimg = cv2.idft(ishift)  # 傅里叶逆变换库函数调用
res2 = cv2.magnitude(iimg[:, :, 0], iimg[:, :, 1])  # 双通道结果转换为0到255的范围

plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文

# 显示图像
plt.subplot(131), plt.imshow(img, 'gray'), plt.title('原图像'), plt.axis('off')
plt.subplot(132), plt.imshow(res1, 'gray'), plt.title('傅里叶变换'), plt.axis('off')
plt.subplot(133), plt.imshow(res2, 'gray'), plt.title('傅里叶逆变换'), plt.axis('off')
plt.show()

Traceback (most recent call last):
  File "C:/Users/86186/PycharmProjects/pythonProject/test3.1.py", line 10, in <module>
    dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)  # 傅里叶变换库函数调用
cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-xeqjxthj\opencv\modules\core\src\dxt.cpp:3506: error: (-215:Assertion failed) type == CV_32FC1 || type == CV_32FC2 || type == CV_64FC1 || type == CV_64FC2 in function 'cv::dft'

 

这两个地方改就可以了:

#在img=...下面加一行,先对图像灰度化处理

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#改一行,将gray传入

dft = cv2.dft(np.float32(gray), flags=cv2.DFT_COMPLEX_OUTPUT)  # 傅里叶变换库函数调用