Kyl*_*772 4 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)
Run Code Online (Sandbox Code Playgroud)
当我更改文件时,我只是调整了文件本身的名称,整个路径都没有改变,只是拒绝接受我的某些图像,这些图像本质上是相同的。
我在尝试使用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'
Run Code Online (Sandbox Code Playgroud)
当我尝试从上面的代码片段显示一个窗口时,出现了此错误。
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
Run Code Online (Sandbox Code Playgroud)
可能您\
在文字中有特殊含义的问题-例如\t
或\n
使用\\
代替\
imgloc = "F:\\Kyle\\Desktop\\Coinjar\\Test images\\ten.png"
Run Code Online (Sandbox Code Playgroud)
要么 r''
imgloc = r"F:\Kyle\Desktop\Coinjar\Test images\ten.png"
Run Code Online (Sandbox Code Playgroud)
编辑:
除偶数外的某些模块/
-例如在Linux路径中
imgloc = "F:/Kyle/Desktop/Coinjar/Test images/ten.png"
Run Code Online (Sandbox Code Playgroud)
根据我的经验,太长的文件路径(取决于操作系统)也会导致cv2.imread()
失败。
此外,当它失败时,它通常会默默地失败,因此甚至很难意识到它失败了,通常代码之外的东西会引发错误。
希望这可以帮助。
小智 5
在 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)
...
Run Code Online (Sandbox Code Playgroud)