我不完全确定为什么会这样,但我正在制作一个程序,我有很多问题试图让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
答案 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()
,//
或\
。我尝试使用浏览器中的左键单击保存2张图片时丢失了几个小时。我拍摄个人相机图像后,工作正常。
#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 文件在同一个文件夹中。
我的解决方法:
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