Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在opencv中,有没有一种方法可以打开正在实时录制和创建的.avi?_Windows_Opencv_Image Processing_Video_Avi - Fatal编程技术网

Windows 在opencv中,有没有一种方法可以打开正在实时录制和创建的.avi?

Windows 在opencv中,有没有一种方法可以打开正在实时录制和创建的.avi?,windows,opencv,image-processing,video,avi,Windows,Opencv,Image Processing,Video,Avi,我有一个摄像头录制应用程序,它可以接收摄像头图像,录制并将摄像头图像输出保存为.avi文件,我可以播放并执行录制后的任何操作。我想创建一个实时opencv代码,可以实时获取这些.avi文件,打开它,对它进行操作,实时进行分类。opencv是否可以在编写这些.avi时打开它们?最好是Python,也是C++实现?这将在windows10上完成 编辑: 目前,当我尝试使用输出.avi和CV2作为通用视频捕获时 cap = cv2.VideoCapture('out.avi') ret, frame

我有一个摄像头录制应用程序,它可以接收摄像头图像,录制并将摄像头图像输出保存为.avi文件,我可以播放并执行录制后的任何操作。我想创建一个实时opencv代码,可以实时获取这些.avi文件,打开它,对它进行操作,实时进行分类。opencv是否可以在编写这些.avi时打开它们?最好是Python,也是C++实现?这将在windows10上完成

编辑: 目前,当我尝试使用输出.avi和CV2作为通用视频捕获时

cap = cv2.VideoCapture('out.avi')
ret, frame = cap.read()

while(True):
    ret, frame = cap.read()
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
这给了我一个错误

Traceback (most recent call last):
  File "video_grab.py", line 15, in <module>
    cv2.imshow('frame', frame)
cv2.error: OpenCV(4.1.2) C:\projects\opencv- 
python\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion 
failed) size.width>0 && size.height>0 in function 'cv::imshow'
回溯(最近一次呼叫最后一次):
文件“video_grab.py”,第15行,在
cv2.imshow(“帧”,帧)
错误:OpenCV(4.1.2)C:\projects\OpenCV-
python\opencv\modules\highgui\src\window.cpp:376:错误:(-215:断言)
失败)函数“cv::imshow”中的size.width>0&&size.height>0

由于停止并保存捕获时视频具有0×0维度,因此断言很可能失败。

根据AVI文件的编解码器,以下解决方案可能有效或无效:

  • 验证
    ret
    值是否为
    True
  • waitKey
    中的时间增加到1毫秒以上
导入cv2
cap=cv2.VideoCapture('out.avi')
帧周期=100#100毫秒-假设帧速率约为10Hz
虽然(正确):
ret,frame=cap.read()
如果ret:
cv2.imshow(“帧”,帧)
如果cv2.waitKey(帧周期)&0xFF==ord('q'):
打破
我使用“Motion JPEG”编解码器对其进行了测试,并收到一条警告消息,如:
[mjpeg@00000 2A22394B0E0]在以高于实际帧速率的速度读取时超出了8

您也可以尝试快速阅读,并在
ret=False
时降低阅读速度:

frame_period=1#快速开始读取(仅等待1毫秒)
虽然(正确):
ret,frame=cap.read()
如果ret:
cv2.imshow(“帧”,帧)
其他:
frame_period=100#到达文件末尾时,将速率降低到10Hz。
如果cv2.waitKey(帧周期)&0xFF==ord('q'):
打破
我认为如果您有一些新帧被捕获的迹象,它会工作得更好。
我无法通过使用OpenCV“查询”AVI文件来找到解决方案