cv2.imread总是返回NoneType

时间:2013-07-30 14:05:31

标签: python-2.7 opencv windows-7

cv2.imread始终返回NoneType

我在64位Windows 7上使用python版本2.7和OpenCV 2.4.6。

可能是某种bug或权限问题,因为在另一台计算机上完全相同的python和cv2包安装工作正常。这是代码:

im = cv2.imread("D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR)

我从http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv下载了OpenCV。任何线索都将受到赞赏。

13 个答案:

答案 0 :(得分:6)

尝试更改斜杠的方向

im = cv2.imread("D:/testdata/some.tif",CV_LOAD_IMAGE_COLOR)

或将r添加到字符串的开头

im = cv2.imread(r"D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR)

答案 1 :(得分:4)

首先,确保路径有效,不包含任何单个反斜杠。检查其他答案,例如https://stackoverflow.com/a/26954461/463796

如果路径已修复但图片仍未加载,则可能确实是OpenCV bug尚未解决,截至2013年。cv2.imread在Win32下无法正常工作

在此期间,使用LoadImage,它应该可以正常工作。

im = cv2.cv.LoadImage("D:/testdata/some.tif", CV_LOAD_IMAGE_COLOR)

答案 2 :(得分:4)

偶然发现了这个。

解决方案非常简单但不直观。

  • 如果您使用相对路径,则可以分别使用'{'或'/'作为test\pic.jpgtest/pic.jpg
  • 如果您使用绝对路径,则只能在/.../test/pic.jpg中使用'/'作为unix,或C:/.../test/pic.jpg用于Windows
  • 为安全起见,只需将for root, _, files in os.walk(<path>):abs_path = os.path.join(root, file)结合使用即可。之后调用imread,就像在img = ocv.imread(abs_path)中一样。

答案 3 :(得分:1)

在我的情况下,问题是路径中的空格。将图像移动到没有空格的路径后,它就可以工作了。

答案 4 :(得分:1)

如果此问题中没有人提及,则另一种解决方法是使用plt读取图像,然后将其转换为BGR格式。

img=plt.imread(img_path)
print(img.shape)
img=img[...,::-1]

已在 cv2.imread does not read jpg files

答案 5 :(得分:0)

>>> im=cv2.imread("C:\Users\Virgile\Downloads\red.JPG")
>>> print im
None

>>> im=cv2.imread("C:/Users/Virgile/Downloads/red.JPG")
>>> print im
[[[ 15  36  51]
  [ 18  34  51]
  [ 19  33  51]
  ...,

(使用opencv 3.0.0测试)

答案 6 :(得分:0)

这需要很长时间才能解决。首先确保该文件在目录中并检查即使Windows资源管理器说该文件是&#34; JPEG&#34;它实际上是&#34; JPG&#34;。第一个print语句是确保文件实际存在的关键。我是一个初学者,所以如果代码很糟糕,那就这样吧。 代码,只是导入图片并显示它。如果代码找到该文件,则将在python窗口中打印True。

import cv2
import sys
import numpy as np
import os

image_path= "C:/python27/test_image.jpg"
print os.path.exists(image_path)



CV_LOAD_IMAGE_COLOR = 1 # set flag to 1 to give colour image
CV_LOAD_IMAGE_COLOR = 0 # set flag to 0 to give a grayscale one
img = cv2.imread(image_path,CV_LOAD_IMAGE_COLOR)
print img.shape
cv2.namedWindow('Display Window') ## create window for display
cv2.imshow('Display Window', img) ## Show image in the window
cv2.waitKey(0) ## Wait for keystroke
cv2.destroyAllWindows() ## Destroy all windows

答案 7 :(得分:0)

我有一个类似的问题,改变了斜线的工作方向

答案 8 :(得分:0)

我花了一些时间才发现这个错误是由我案例中的图像文件损坏引起的。因此,请手动检查您的文件以确保其有效,并且可以由普通图像查看器打开。

答案 9 :(得分:0)

我遇到了类似的问题,将图像名称更改为英文字母对我来说很有效。此外,它不适用于数字名称(例如1.jpg)。

答案 10 :(得分:0)

在ubuntu 18.04上,我也遇到过同样的问题。

cv2.imread(path)

当我将path参数从 Relative_File_Path 更改为 Absolute_File_Path 时,我解决了。

希望它会有用。

答案 11 :(得分:0)

我的操作系统是 Windows 10。我注意到 imread 对路径非常敏感。没有任何关于斜杠的建议对我有用,所以我如何设法解决问题:我已将文件放入项目文件夹并输入: img = cv2.imread("MyImageName.jpg", 0)

所以没有任何路径和文件夹,只有文件名。这对我有用。 还可以尝试来自不同来源和不同格式的不同文件

答案 12 :(得分:-1)

我遇到过这种情况。原来PIL模块提供此功能。 同样,在我安装PIL之前,numpy.imread和scipy.misc.imread都不存在

在我的配置(win7 python2.7)中,完成如下:

cd /c/python27/scripts
easy_install PIL