我正在尝试切片视频捕获帧以收集手势的图像数据,所以我认为一个简单的起点是切片视频帧并将帧从帧的特定部分写入目录,但是当我尝试显示切片帧时,我遇到了这个不断的断言错误。我已经搜索了其他解决方案,但我无法弄清楚
代码是
import numpy as np
t,r,b,l = 250, 500, 500,50
fgbg = cv2.BackgroundSubtractorMOG2()
cam = cv2.VideoCapture(0)
while cam.isOpened():
ret,frame = cam.read()
cv2.rectangle(frame,(l,t),(r,b),(255,0,0),2)
cv2.imshow('frame',frame)
(h,w) = frame.shape[:2]
roi = frame[t:b,r:l]
cv2.imshow('roi',roi) #giving error
if 0xFF & cv2.waitKey(1) == ord('q'):
break
cam.release()
cv2.destroyAllWindows()
我也试过:
cv2.imshow('roi',roi.astype('uint8')
和
cv2.imshow('roi',np.asarray(roi,dtype='uint8'))
所有人都给我同样的错误
我不断收到此错误: 错误:OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-kh7iq4w7\opencv\modules\highgui\src\window.cpp:376: 错误:(-215 :Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
编辑:roi =frame[t:b,r:l]
不断返回一个空列表,如何对 ndarray 帧进行切片,以便获得正确的切片数组?
任何帮助将不胜感激。谢谢
答案 0 :(得分:0)
所以看起来问题完全在于它的切片方式:
我的代码是:
roi = frame[t:b, r:l]
切片应该是 [行,列]
我的错误是从右到左切割列,而不是从左到右。
roi = frame[t:b, l:r]
根据需要给出切片帧