【发布时间】:2021-09-19 08:29:38
【问题描述】:
我有一个视频,我试图使用 cv2.polyfill 和按位运算显示特定区域。当我在图像上执行此操作时,它可以正常工作,但是在视频上执行此操作时会出现以下错误。我之前用另一张图片/视频做这件事没有问题。要显示的区域确实显示为冻结的图片,但也会使内核崩溃。代码是:
import cv2
import numpy as np
cap = cv2.VideoCapture("heartvideo.wmv",0)
def roi(frame):
mask = np.zeros_like (frame)
array = np.array([[148,550],[300,650],[400,680],[800,680],[880,560],[555,70],[492,50]])
contours = np.array([[50,50], [50,150], [150,150], [150,50]])
cv2.fillPoly(mask, pts = [array], color =(255))
masked = cv2.bitwise_and(mask,frame)
return mask
while(cap.isOpened()): # while video is initialised
ret, frame = cap.read() #reads the video bit by bit
adj = roi(frame)
if ret:
cv2.imshow("Image", adj)
else:
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
if cv2.waitKey(15) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
错误:OpenCV(4.5.3) :-1: 错误:(-5:Bad argument) in function 'fillPoly'
重载解析失败:
- 不支持 img 数据类型 = 17
- 参数“img”的预期 Ptr<:umat>
【问题讨论】:
-
检查
if ret:之前使用frame。它可能是空的/无效的。请调试您的代码。在调试器中运行它。使用调试器。看看发生了什么。查看数据。