Python 2.7 cv2.imread始终返回NoneType

Python 2.7 cv2.imread始终返回NoneType,python-2.7,opencv,windows-7,Python 2.7,Opencv,Windows 7,cv2.imread总是返回NoneType 我在64位Windows7上使用python版本2.7和OpenCV 2.4.6 可能是某种bug或权限问题,因为在另一台计算机上安装完全相同的python和cv2软件包可以正常工作。代码如下: im = cv2.imread("D:\testdata\some.tif",CV_LOAD_IMAGE_COLOR) 我从下载了OpenCV。请提供任何线索。首先,确保路径有效,不包含任何反斜杠。检查其他答案,例如 如果路径是固定的,但图像仍然没有加载,

cv2.imread
总是返回
NoneType

我在64位Windows7上使用python版本2.7和OpenCV 2.4.6

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

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

我从下载了OpenCV。请提供任何线索。

首先,确保路径有效,不包含任何反斜杠。检查其他答案,例如

如果路径是固定的,但图像仍然没有加载,那么从2013年起,它可能确实是一个尚未解决的问题<代码>cv2.imread在Win32下对我来说也不能正常工作

同时,使用LoadImage,它应该可以正常工作

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

我碰到过这个。原来PIL模块提供了这个功能。 类似地,numpy.imread和scipy.misc.imread在我安装PIL之前都不存在

在我的配置(win7 python2.7)中,这是按如下方式完成的:

cd /c/python27/scripts
easy_install PIL

尝试更改斜线的方向

im = cv2.imread("D:/testdata/some.tif",CV_LOAD_IMAGE_COLOR)
或者将r添加到字符串的开头

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

(使用opencv 3.0.0进行测试)

这需要很长时间才能解决。首先确保该文件位于目录中,并检查即使windows资源管理器说该文件是“JPEG”,但实际上是“JPG”。第一个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

我有一个类似的问题,改变斜杠的方向是有效的:


/
更改为
\

刚刚偶然发现了这个

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

  • 如果使用相对路径,则可以分别使用“\”或“/”,如
    test\pic.jpg
    test/pic.jpg
    中所示
  • 如果使用绝对路径,则应仅使用“/”,如unix的
    /…/test/pic.jpg
    或windows的
    C:/…/test/pic.jpg
    中所示
  • 为了安全起见,只需对os.walk()中的root、\ux文件使用
    并结合使用
    abs\u path=os.path.join(root,file)
    。之后调用imread,如在
    img=ocv.imread(abs\u路径)
    中,总是可以工作的

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

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

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

我以前在ubuntu 18.04上也遇到过同样的问题

cv2.imread(路径)
当我将
路径
参数从
相对文件路径
更改为
绝对文件路径
时,我解决了这个问题


希望它有用。

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

img=plt.imread(img\u路径)
打印(图像形状)
img=img[…,:-1]
这一点已在本报告中提到
我的操作系统是Windows 10。我注意到imread对path非常敏感。并没有任何关于斜杠的建议对我有效,所以我如何设法解决这个问题:我已将文件放入项目文件夹并键入: img=cv2.imread(“MyImageName.jpg”,0)

因此,没有任何路径和文件夹,只有文件名。这对我很有效。
还可以尝试使用cv2.imread(r“D:\testdata\some.tif”,CV\u LOAD\u IMAGE\u COLOR),尝试使用不同来源和不同格式的不同文件。r将字符串转换为不转义特殊字符的“原始字符串”,因此您将看到更合理的结果。这是因为默认情况下,python字符串接受某些特殊的“转义序列”。例如,“\n”是一个新行。有关更多详细信息,请参见此处:。另外,请查看路径是否存在。导入os打印os.path.exists(r'D:\testdata\some.tif')。查看路径是否存在。删除r,我确信它不会工作。您的第一个案例失败,因为python将
\r
视为回车字符,而不是opencv的错误。在python中拼写第一行的正确方法是
cv2.imread(r“C:\Users\Virgile\Downloads\red.JPG”)
——这个小小的
r
告诉它不要对反斜杠做任何不好的事情,这与cv2无关。在第一种情况下,路径不存在,并且imread在linux上返回
None
,~/path/file.jpg将不起作用,必须替换为~/home/user/path/file.jpgI。我怀疑它是否适用于此路径。您需要原始前缀,比如
r“D:\testdata\some.tif”
@Jean-Françoisfare。我更改了答案以指出路径问题,并在示例代码中修复了它。我相信在写答案的时候,一些图像仍然需要解决方法,即使路径正确,所以我将保留答案None@NelsonGon在这个问题的背景下,这似乎是一个矛盾修饰法。如果图像加载,您将获得一个句柄,而该句柄不能为空。你有什么要补充的信息吗?否则,可能会根据您的情况创建一个新问题,但请提供有关具体情况的更多信息。我可以使用
imshow
查看图像,但例如,我无法查看图像的
形状,因为它是
None
而不是数组。最后,我使用了
matplotlib
imread
,它似乎解决了这个问题(我不知道为什么)。“Change/to\”。你错了。首先,这是一个Python问题,通常在以字符串形式编写Windows路径时会发现,因为在路径中找到的“\”是Python中的转义标记。在Python中,有几个
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