繁体   English   中英

OpenCV Python 不使用 imread() 打开图像

[英]OpenCV Python not opening images with imread()

我不完全确定为什么会发生这种情况,但我正在制作一个程序,并且在尝试让 opencv 使用 imread 打开图像时遇到了很多问题。 我不断收到错误消息,说图像宽 0px,高 0px。 这对我来说没有多大意义,所以我在这里搜索,我也没有从 SO 那里得到任何答案。

我拍了大约 20 张照片,它们都使用相同的设备。 可能其中 8 个实际上打开并正常工作,其余的则没有。 它们也没有损坏,因为它们在其他程序中打开。 我已经三重检查了路径,他们使用的是完整路径。

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

这是我正在使用的代码片段,它在我结束时重现了错误。

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

可能您对文本中\\特殊含义有\\ - 如\\t\\n

使用\\\\代替\\

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

或使用前缀r'' (它会将其视为没有特殊代码的raw文本)

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

编辑:

某些模块在 Linux 路径中接受偶数/ like

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

根据我的经验,太长(取决于操作系统)的文件路径也会导致cv2.imread()失败。

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

希望这可以帮助。

注意:

  • 用可靠的图片尝试imread()
  • 以及您上下文中的正确路径(参见 Kyle772 答案)。 对我来说//\\

我花了几个小时尝试使用浏览器左键单击保存的 2 个图像。 一旦我拍摄了个人相机图像,它就可以正常工作。

Spyder 屏幕截图

    #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)

我对每个面临同样问题的人的建议是试试这个:

cv2.imshow("image", img)

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

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

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

img = imageio.imread('file_path')

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

我希望我能帮助别人

在 Windows 上cv.imread同样的问题:从子文件夹读取 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)
...

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

我不完全确定为什么会这样,但是我正在编写程序,并且遇到很多问题,试图让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

当你得到这样的错误时 AttributeError: 'NoneType' object has no attribute 'shape'

尝试使用 new_image=image.copy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM