在视频中显示帧的裁剪部分:错误(-215)size.width> 0&&函数cv :: imshow中的size.height> 0

时间:2018-01-08 22:05:48

标签: python-3.x opencv

请原谅我,如果这是一个多余的问题,但我提到了与上述错误相关的所有可能的解决方案,但没有人帮助我解决我的问题。

我正在使用下面的代码在不同的窗口中分别显示视频(mag,ang)的裁剪部分(roi_1),但是我在尝试显示裁剪部分的代码片段中出现以下错误(roi_1 )。如果对问题有任何帮助,我会很高兴

下面你会看到一些注释,说明抛出此错误的代码部分

Traceback (most recent call last): File "D:/Code/Python/franeback.py", line 35, in <module>
    cv2.imshow('ROI', roi_1)
    cv2.error: D:\Build\OpenCV\opencv-3.2.0\modules\highgui\src\window.cpp:‌​312: 
        error: (-215) size.width>0 && size.height>0 in function cv::imshow
import cv2
import numpy as np

cap =  cv2.VideoCapture('D:\\test2.MP4')
ret, frame1 = cap.read()
prvs = cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY)
hsv = np.zeros_like(frame1)
hsv[...,1] = 255

while(1):
    ret, frame2 = cap.read()
    next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)
    flow = cv2.calcOpticalFlowFarneback(prvs,next, None, 0.5, 3, 15, 3, 5, 1.2, 0)

    mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])
    hsv[...,0] = ang*180/np.pi/2
    hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)
    cv2.rectangle(mag, (200, 220), (350, 350), (255, 255, 0), 2)
    cv2.rectangle(mag, (400, 520), (600, 600), (255, 255, 0), 2)
    roi_1= mag[200:220, 350:350]
    cv2.imshow('frame2',mag)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
    cv2.rectangle(ang, (200, 220), (350, 350), (0, 255, 0), 2)
    cv2.rectangle(ang, (400, 520), (600, 600), (0, 255, 0), 2)
    cv2.imshow('frame1', ang)
    r = cv2.waitKey(30) & 0xff
    if r == 27:
        break

# Part throwing error starts
    cv2.imshow('ROI', roi_1)
    s = cv2.waitKey(30) & 0xff
    if s == 27:
        break
#Part throwing error ends

    prvs = next
    cap.release()
    cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:2)

知道了!

关注我的追溯,您会看到error: (-215) size.width>0 && size.height>0 in function cv::imshow

这表明问题在于我如何创建roi_1 - roi_1= mag[200:220, 350:350]。第二个索引的范围是长度为0(所有&gt; = 350和<350),它不应该是。

我将其更改为roi_1= mag[200:220, 350:370]并且我不再收到相同的错误。