【问题标题】:error: (-215) size.width>0 && size.height>0 in function imshow错误:(-215) size.width>0 && size.height>0 in function imshow
【发布时间】:2015-08-11 12:47:18
【问题描述】:

程序需要读取一个视频,计算帧数,然后显示在一个窗口中。该错误发生在视频结束后。 我该如何解决这个问题?

这里是来源:

import tkMessageBox
import cv2

banner = cv2.imread('../data/banner.png')
video = cv2.VideoCapture('../data/pintado_real_crop.avi')
contadorDeFrames = True
contador = 0


cv2.imshow('Projeto Pacu', banner)

cv2.moveWindow('Projeto Pacu', 100,50)

while(contadorDeFrames == True):

    contadorDeFrames, frame = video.read()
    contador = contador + 1

    cv2.imshow("Video", frame)
    cv2.moveWindow('Video', 100, 178)

    print"Frame: %d" %contador

    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break

tkMessageBox.showinfo("Frames contador: %d" %contador)
video.release()
cv2.destroyAllWindows()

完全错误:

OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /build/buildd/opencv-2.4.8+dfsg1/modules/highgui/src/window.cpp, line 269
Traceback (most recent call last):
  File "/home/vagner/PycharmProjects/TesteVideo/src/TestaVideo.py", line 20, in <module>
    cv2.imshow("Video", frame)
cv2.error: /build/buildd/opencv-2.4.8+dfsg1/modules/highgui/src/window.cpp:269: error: (-215) size.width>0 && size.height>0 in function imshow

【问题讨论】:

标签: python opencv


【解决方案1】:

我没有这个问题的答案,但我可以指定错误的来源,并且我有一个解决方法。

就像你在我的第一个示例中看到的那样,我尝试在 if 语句中打印一个退出,并注意到它没有被调用。所以我展示了视频有多少帧,并让 if 语句被帧号调用。所以错误消失了。

示例 1:

   import numpy as np
   import cv2

    cap = cv2.VideoCapture('richtigcounter.mp4')
    frames =1
    while True:
    ret, frame = cap.read()
    print ("test")
    cv2.imshow('frame',frame)
    frames =frames + 1
    print (frames)
if cv2.waitKey(1) & 0xFF == ord('q'):
print("Quit")
break

cap.release()
cv2.destroyWindow(cap)

示例 2:

    import numpy as np
    import cv2
    import time

    def Reinfall():
        cap = cv2.VideoCapture('reinfallcounter.mp4')
        frames =1

        while True:
        ret, frame = cap.read()




        cv2.imshow('video', frame)
        frames =frames + 1
        print (frames)
        cv2.waitKey(1)
        if frames == 245:
          print("Quit")
          break

cap.release()
cv2.destroyAllWindows()

【讨论】:

    【解决方案2】:

    在您的代码中,您正在尝试打印空帧:

    contadorDeFrames, frame = video.read()
    contador = contador + 1
    cv2.imshow("Video", frame)
    

    当您的代码读取最后一帧+1 的帧时,该值将为空并且您正在尝试打印该帧。所以检查框架是否为空并打印。

    【讨论】:

      猜你喜欢
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      相关资源
      最近更新 更多