在Raspberry Pi上没有OpenCV 2.3.1和Python创建的视频文件

时间:2013-06-14 06:42:23

标签: opencv video python-2.7 webcam raspberry-pi

我正在尝试从网络摄像头(Logitech c210)捕获视频并从中创建视频文件。

这是在Raspbian Wheezy 2013-05-25。

相机上的指示灯亮起约30秒但未创建文件。 我已经在OpenCV窗口中显示了网络摄像头。

我想知道这是否是编解码器问题,因为脚本在带有-1参数的窗口上工作?

如果有的话,是否有推荐的Raspberry Pi编解码器?

如果我购买mpeg2编解码器会起作用吗?

我列出了我尝试过的编解码器,虽然没有用。

脚本如下:

import cv2
import time

def InitialiseCamera():
    camera = cv2.VideoCapture(0)
    if camera is None:
        print('Warning: unable to access camera')
    else:
        print('initialized camera')
    return camera

def InitialiseWriter():
    fps = 5
    size = (640, 480)
    destinationFile = 'video.avi'

    # These are the codecs I've tried so far
    codec = cv2.cv.CV_FOURCC('I','4','2','0')
    #codec = cv2.cv.CV_FOURCC('A','V','C','1')
    #codec = cv2.cv.CV_FOURCC('Y','U','V','1')
    #codec = cv2.cv.CV_FOURCC('P','I','M','1')
    #codec = cv2.cv.CV_FOURCC('M','J','P','G')
    #codec = cv2.cv.CV_FOURCC('M','P','4','2')
    #codec = cv2.cv.CV_FOURCC('D','I','V','3')
    #codec = cv2.cv.CV_FOURCC('D','I','V','X')
    #codec = cv2.cv.CV_FOURCC('U','2','6','3')
    #codec = cv2.cv.CV_FOURCC('I','2','6','3')
    #codec = cv2.cv.CV_FOURCC('F','L','V','1')
    #codec = cv2.cv.CV_FOURCC('H','2','6','4')
    #codec = cv2.cv.CV_FOURCC('A','Y','U','V')
    #codec = cv2.cv.CV_FOURCC('I','U','Y','V')
    #codec = -1

    video  = cv2.VideoWriter(destinationFile, codec, fps, size, True);
    if video is None:
        print('Warning: unable to create video writer')
    else:
    print('initialized writer')
    return video

def CaptureVideo(c,w):
i = 0
    while i<150:
        i+=1
        f,img = c.read()
        try:
            w.write(img)
        except:
            print "Unexpected error: ", sys.exec_info()[0]
    print('complete')
    c.release()

if __name__ == '__main__':    
    cam = InitialiseCamera()
    writer = InitialiseWriter()
    CaptureVideo(cam,writer)

3 个答案:

答案 0 :(得分:1)

我最终通过并尝试了所有四位软件编解码器,但都没有工作。

与mpeg2编解码器相同。

我最终使用avconv用这一行创建和捕获视频:

import os
os.system("avconv -f video4linux2 -input_format mjpeg -i /dev/video0 output.avi")

os.system()用于运行终端命令。

OpenCV仍可用于稍后处理视频文件。

希望这有助于某人。

答案 1 :(得分:1)

如果这个答案为时已晚,请尝试

CV_FOURCC('M','P','E','G')

在Raspbian上为我工作。 虽然,fps为5 可能不支持

答案 2 :(得分:0)