断言失败:size.width> 0&&函数imshow中的size.height> 0

时间:2015-07-23 11:44:28

标签: python opencv raspberry-pi

我在raspberry pi上使用opencv2和python。我是python和opencv的新手。我试图读取jpeg图像并显示图像,它显示以下错误:

Twitter.sharedInstance().APIClient.loadTweetWithID(TweetID,
    completion:<#TWTRLoadTweetCompletion##(TWTRTweet?, NSError?) -> Void#>)

,代码是:

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

12 个答案:

答案 0 :(得分:6)

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

cv中的错误处理可能归功于它在C ++实现上非常薄的包装层(其中错误时返回NULL是常见做法)。

答案 1 :(得分:3)

在Rpi 3中使用Raspbian时,我在尝试阅读qrcodes时遇到了同样的问题。错误是因为cv2无法读取图像。如果使用png image install pypng module。

sudo pip install pypng

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

import cv2
img = cv2.imread(r'D:\Study\Git\OpenCV\resources\lena.png')
cv2.imshow('output', img)
cv2.waitKey(0)

r 代表“原始”,它将导致字符串中的反斜杠被解释为实际的反斜杠,而不是特殊字符。

答案 4 :(得分:1)

我也遇到了类似的错误,所以我不想打开一个新问题,而是将其收集在这里可能是个好主意,因为已经有了一些有用的答案...

我的代码(用于在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:/用户/用户名/文档/smile-main/video-testing.py”,第24行,在 cv.imshow('frame',frame) 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:声明失败)函数'cv :: imshow'中的size.width> 0 && size.height> 0

我将不胜感激!

**

编辑:我如何解决错误!

**

我将代码封装在try / except中,如下所示:

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

即使视频播放正常,为什么仍然会弹出此错误,以及为什么try / except消除了它,我仍然很感激。

谢谢!

答案 5 :(得分:0)

造成此错误的原因之一是指定的路径中没有文件时。因此,一个好的做法是验证这样的路径(如果您使用的是基于Linux的计算机):

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

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

答案 6 :(得分:0)

就我而言,我忘记将终端的工作目录更改为我的code + testImage的工作目录。因此,它无法在此处找到图像。

最后,这对我有用:

我将图像和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

答案 7 :(得分:0)

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

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

添加cv2.IMREAD_COLOR应该可以解决

答案 8 :(得分:0)

当我只是无法写出图像的扩展名时,这个问题发生在我身上。
请检查是否忘记将扩展名或完整路径的任何其他部分写入图像。

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

答案 9 :(得分:0)

我通过使用此代码来解决

    os.chdir(f"{folder_path}")

答案 10 :(得分:0)

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

答案 11 :(得分:-1)

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