断言失败:size.width>0 && size.height>0 in function imshow



我在树莓派上使用OpenCV2和Python。当我尝试读取jpeg图像并显示图像时,它显示以下错误:

/home/pi/opencv-2.4.9/modules/highgui/src/window.cpp:269: 
  error: (-215) size.width>0 &&  size.height>0 in function imshow.

代码为:

import cv2
# windows to display image
cv2.namedWindow("Image")
# read image
image = cv2.imread('home/pi/bibek/book/test_set/bbb.jpeg')
# show image
cv2.imshow("Image", image)
# exit at closing of window
cv2.waitKey(0)
cv2.destroyAllWindows()

图像加载失败(可能是因为您忘记了路径中的前导/(。imread然后返回None。将None传递给imshow会导致它尝试创建大小为0x0的窗口,但失败了。

cv中糟糕的错误处理可能是由于它在C++实现上的包装层非常薄(在这里,错误时返回NULL是一种常见的做法(。

这是导致问题的路径,我也遇到了同样的问题,但当我给出图像的完整路径时,它运行得很好。

在Rpi 3中使用Raspbian时,我在尝试读取qrcode时遇到了同样的问题。错误是因为cv2无法读取图像。如果使用png图像,请安装pypng模块。

sudo pip install pypng

在指定文件地址的代码中使用r
例如:

import cv2
img = cv2.imread(r'D:StudyGitOpenCVresourceslena.png')
cv2.imshow('output', img)
cv2.waitKey(0)

r代表";生的";并且将导致字符串中的反斜杠被解释为实际的反斜杠,而不是特殊字符。

在我的情况下,我忘记将终端的工作目录更改为代码+testImage的工作目录。因此,它未能在那里找到图像。

最后,这是对我有效的:

我在Desktop上保存了图像和Python文件。我把cmd目录改成了

cd Desktop

然后检查了我的文件:

ls

这就是我的代码:

import cv2
import numpy as np
im = cv2.imread('unnamed.jpg')
#Display the image
cv2.imshow('im',im)
cv2.waitKey(2000) #Milliseconds

我也遇到了类似的错误,所以与其打开一个新问题,我想也许把它全部收集在这里是个好主意,因为已经有一些有用的答案了。。。

我的代码(在Python中使用OpenCV打开视频的教科书代码(:

import cv2 as cv
import os
path = 'C:/Users/username/Google Drive/Master/THESIS/uva_nemo_db/videos/'
os.chdir(path)
video_file = '001_deliberate_smile_2.mp4'
cap = cv.VideoCapture(video_file) 

if not cap.isOpened():
    print("Error opening Video File.")
while True:
    # Capture frame-by-frame
    ret, frame = cap.read()
    cv.imshow('frame',frame)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
    # if frame is read correctly, ret is True
    if not ret:
        print("Can't retrieve frame - stream may have ended. Exiting..")
        break
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()

我之所以目瞪口呆是因为我得到了同样的错误-但是-视频实际上是播放的。。。运行代码时,Python解释器会打开一个运行视频的Python实例。一旦视频结束,它就会脱离循环,关闭视频并抛出错误:

追踪(最近一次通话(:文件";C:/Users/用户名/Documents/smile-main/video-testing.py";,第24行,incv.imshow("帧",帧(cv2.error:OpenCV(4.4.0(C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wwma2wne\OpenCV\modules\highgui \src\window.cpp:376:错误:(-215:断言失败(size.width>0&size.height>函数"cv::imshow"中的0

如果有任何意见,我将不胜感激!

**

编辑:我是如何修复错误的

**

我在一次尝试中封装了我的代码/除了这样:

# Import required libraries
import cv2 as cv
import os
path = 'C:/Users/username/Google Drive/Master/THESIS/uva_nemo_db/videos/'
# test_path = 'C:/Users/username/Downloads'
os.chdir(path)
os.getcwd()
video_file = '001_deliberate_smile_2.mp4'
cap = cv.VideoCapture(video_file) #cap for "Video Capture Object"
   
if not cap.isOpened():
    print("Error opening Video File.")
try:
    while True:
        # Capture frame-by-frame
        ret, frame = cap.read()
        cv.imshow('frame',frame)
        if cv.waitKey(1) & 0xFF == ord('q'):
            break
        # if frame is read correctly, ret is True
        if not ret:
            print("Can't retrieve frame - stream may have ended. Exiting..")
            break
except:
    print("Video has ended.")

# When everything done, release the capture
cap.release()
cv.destroyAllWindows()

尽管视频播放得很好,但我仍然很感激任何关于为什么会出现这个错误的输入,以及为什么尝试/排除消除了它。

谢谢!

导致此错误的原因之一是在指定的路径上没有文件。因此,一个好的做法是验证这样的路径(如果你在基于linux的机器上(:

ls <path-provided-in-imread-function>

如果路径不正确或文件丢失,则会出现错误。

在读取图像文件时,指定颜色选项应该可以解决这个问题,例如:

image=cv2.imread('img.jpg',cv2.IMREAD_COLOR)

添加cv2.IMREAD_COLOR应该可以解决这个

这个问题发生在我刚写映像扩展失败的时候
请检查您是否忘记将扩展名或完整路径的任何其他部分写入图像。

请记住,无论您是使用OpenCV还是Mathplotlib打印图像,都需要扩展。

我通过使用以下代码来解决它

    os.chdir(f"{folder_path}")

这是因为没有加载图像。对我来说,在VScode,相对路径是个问题,但从VScode本身复制文件路径后,问题就解决了。

我在VSCode上也遇到了同样的问题。尝试在Notepad++上运行相同的代码,结果成功了。要解决VSCode上的此问题,请不要忘记在左侧窗格中打开您正在处理的文件夹。这解决了我的问题。

最新更新