OpenCV Python没有用imread()打开图像

时间:2014-07-03 23:54:17

标签: python opencv image-loading

我不完全确定为什么会这样,但我正在制作一个程序,我有很多问题试图让opencv使用imread打开图像。我不断收到错误,说图像是0px宽,0px高。这对我来说没有多大意义所以我在这里搜索过,我也没有得到任何答案。

我拍了大约20张照片,他们都使用同一台设备。可能其中8个实际打开并正常工作,其余的则没有。它们没有被破坏,因为它们在其他程序中打开。我已经对路径进行了三次检查,他们正在使用完整路径。

还有其他人有这样的问题吗?我的所有文件都是.jpgs,我没有看到任何问题。这是一个错误还是我做错了什么?

以下是我正在使用的代码片段,它正在重现我的错误。

imgloc = "F:\Kyle\Desktop\Coinjar\Test images\ten.png"
img = cv2.imread(imgloc)
cv2.imshow('img',img)

当我更改文件时,我只是调整文件本身的名称,整个路径不会改变它只是拒绝接受我的一些基本上相同的图像。

我从代码的后续部分收到此错误,我尝试使用img.shape

Traceback (most recent call last):
  File "F:\Kyle\Desktop\Coinjar\CoinJar Test2.py", line 14, in <module>
    height, width, depth = img.shape
AttributeError: 'NoneType' object has no attribute 'shape'

当我尝试从上面的代码片段中显示一个窗口时,我收到此错误。

Traceback (most recent call last):
  File "F:\Kyle\Desktop\Coinjar\CoinJar Test2.py", line 11, in <module>
    cv2.imshow('img',img)
error: ..\..\..\..\opencv\modules\highgui\src\window.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow

9 个答案:

答案 0 :(得分:5)

您可能在文字中遇到\的特殊含义问题,例如\t\n

使用\\代替\

imgloc = "F:\\Kyle\\Desktop\\Coinjar\\Test images\\ten.png"

r''

imgloc = r"F:\Kyle\Desktop\Coinjar\Test images\ten.png"

修改

除了/之外的一些模块 - 就像在Linux路径中一样

imgloc = "F:/Kyle/Desktop/Coinjar/Test images/ten.png"

答案 1 :(得分:1)

注意:

  • 尝试使用可靠的图片imread()
  • 和您的上下文中的正确路径(请参阅Kyle772答案)。对我而言//\

我尝试使用浏览器中的左键单击保存2张图片时丢失了几个小时。我拍摄个人相机图像后,工作正常。

Spyder screen shot

    #context  windows10 / anaconda / python 3.2.0
    import cv2
    print(cv2.__version__) # 3.2.0
    imgloc = "D:/violettes/Software/Central/test.jpg" #this path works fine.  
    # imgloc = "D:\\violettes\\Software\\Central\\test.jpg"   this path works fine also. 
    #imgloc = "D:\violettes\Software\Central\test.jpg" #this path fails.

    img = cv2.imread(imgloc)
    height, width, channels = img.shape
    print (height, width, channels)

答案 2 :(得分:0)

对于cv2.imread(img_url),请勿使用反斜杠转义空格(在img_url中)。

答案 3 :(得分:0)

我对面临相同问题的每个人的建议是尝试以下方法:

cv2.imshow("image", img)

img是关键字。永远不会忘记。

答案 4 :(得分:0)

根据我的经验,太长的文件路径(取决于OS)也可能导致cv2.imread()失败。

此外,当它确实失败时,它通常会静默地失败,因此甚至很难意识到它已失败,并且通常代码会进一步引发错误。

希望这会有所帮助。

答案 5 :(得分:0)

我遇到了 cv.imread() 找不到我的图片的很多麻烦。我想我尝试了所有涉及改变路径的事情。 os.path.exists(file_path) 函数也给了我一个 True。

我最终通过使用 imageio 加载图像解决了这个问题。

img = imageio.imread('file_path')

这也会将 img 加载到一个 numpy 数组中,您可以在此对象上使用 cv.matchTemplate() 之类的函数。但是我会建议您是否正在处理多个图像,然后您使用 imageio 读取所有图像,因为我发现 .imread() 从两个库(opencv,imageio)生成的数组中存在差异可以打开。

希望能帮到人

答案 6 :(得分:0)

在 Windows 上遇到同样的问题:从子文件夹读取 jpg 文件时,cv.imread 返回 None。相同的代码和文件夹结构适用于 Linux。

发现 cv.imread 处理相同的 jpg 文件,如果它们与 python 文件在同一个文件夹中。

我的解决方法:

  • 将图片文件复制到python文件夹
  • cv.imread 中使用此文件
  • 删除多余的图片文件
import os
import shutil
import cv2 as cv

image_dir = os.path.join('path', 'to', 'image')
image_filename = 'image.jpg'
full_image_path = os.path.join(image_dir, image_filename)

image = cv.imread(full_image_path)
if image is None:
    shutil.copy(full_image_path, image_filename)
    image = cv.imread(image_filename)
    os.remove(image_filename)
...

答案 7 :(得分:0)

我知道问题已经得到解答,但以防万一有人仍然无法使用 imread 加载图像。可能是因为字符串路径中有字母,imread 不接受。
例如变音符号和变音符号:
.../äöü/image.jpg
.../test/image.jpg

答案 8 :(得分:-1)

当您遇到类似AttributeError的错误时:'NoneType'对象没有属性'shape'

尝试使用new_image = image.copy