使用opencv2在python中编写流式视频

使用opencv2在python中编写流式视频,python,opencv,video-streaming,Python,Opencv,Video Streaming,在我的项目中,我想保存流式视频 import cv2; if __name__ == "__main__": camera = cv2.VideoCapture(0); while True: f,img = camera.read(); cv2.imshow("webcam",img); if (cv2.waitKey (5) != -1): break; ` 使用上述代码,可以

在我的项目中,我想保存流式视频

import cv2;
if __name__ == "__main__":
     camera =  cv2.VideoCapture(0);
     while True:
          f,img = camera.read();
          cv2.imshow("webcam",img);
          if (cv2.waitKey (5) != -1):
                break;
`
使用上述代码,可以从网络摄像机中传输视频。如何将此流式视频写入文件?

您只需将抓取的帧保存到图像中即可:

camera = cv2.VideoCapture(0)
i = 0
while True:
   f,img = camera.read()
   cv2.imshow("webcam",img)
   if (cv2.waitKey(5) != -1):
       break
   cv2.imwrite('{0:05d}.jpg'.format(i),img)
   i += 1
或者像这样的视频:

camera = cv2.VideoCapture(0)
video  = cv2.VideoWriter('video.avi', -1, 25, (640, 480));
while True:
   f,img = camera.read()
   video.write(img)
   cv2.imshow("webcam",img)
   if (cv2.waitKey(5) != -1):
       break
video.release()    

创建
VideoWriter
对象时,需要提供几个可以从输入流中提取的参数。可以找到教程。

在ubuntu中,使用以下代码从给定图片创建视频

os.system('ffmpeg -f image2 -r 8 -i %05d.bmp -vcodec mpeg4 -y movie3.mp4')

其中,图片名称为00000.bmp、00001.bmp、00002.bmp等。

如果您真的想使用电脑提供的编解码器压缩帧

  • 您应该使用标志值=
    -1
    设置
    cv2.VideoWriter([filename,fourcc,fps,frameSize[,isColor]])
    的第二个参数。这将允许您查看pc中使用的编解码器压缩列表
  • 在我的例子中,Intel提供的编解码器名为IYUV或I420。我不知道还有哪家制造商
  • 如下所示设置此信息

    fourcc = cv2.cv.CV_FOURCC('I','Y','U','V')
    # or
    fourcc = cv2.cv.CV_FOURCC('I','4','2','0')
    # settting all the information
    out = cv2.VideoWriter('output1.avi',fourcc, 20, (640,480))
    
  • 还记得让我头疼的两个小参数吗:
    • 不要忘记cv2.cv前缀
    • 介绍正确的框架尺寸

  • 对于其他内容,您可以使用Ekalic提供的代码,其中有一个AttributeError:“cv2.VideoWriter”对象没有属性“release”@mridul您必须首先导入cv2模块。使用
    导入cv2
    并记住,您可以分别通过camera.get(3)和camera.get(4)获取相机进纸分辨率宽度和高度。