numpy函数.fft.fft2()给出错误:“不能从空轴进行非空取”(opencv,matplotlib,numpy,python27)

时间:2016-12-14 16:26:53

标签: python opencv numpy matplotlib fft

我正在尝试根据我找到的tutorial对图像进行傅里叶变换。

当我尝试运行我的代码时,会出现以下错误:

Error

我没有更改我复制的教程中的任何内容。所以我觉得我的图书馆有问题。我卸载了Python和所有库并再次安装它。但错误仍然显示。

我的代码:

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

img = cv2.imread('C:\Documents\data128.jpg',0)

f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))

plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()

我在Windows 10上使用Python 2.7。感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

发生错误是因为尚未加载图像。原因是找不到该文件。

您可以在python字符串中使用反斜杠指定文件名。但是,python字符串中的反斜杠具有特殊含义,需要进行转义。另请参阅here

可能的解决方案(假设文件确实存在):

  1. 逃避反斜杠

    img = cv2.imread('C:\\Documents\\data128.jpg',0)
    
  2. 使用原始字符串

    img = cv2.imread(r'C:\Documents\data128.jpg',0)
    
  3. 使用单斜杠

    img = cv2.imread('C:/Documents/data128.jpg',0)