首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV -使用VideoWriter不提供文件

OpenCV -使用VideoWriter不提供文件
EN

Stack Overflow用户
提问于 2016-02-16 04:39:19
回答 1查看 1.4K关注 0票数 3

我已经在许多网站上寻找我的问题的解决方案(包括堆栈溢出)。我正试着用OpenCV把我的摄像头里的视频保存到树莓树里。从理论上讲,我的代码运行良好(我可以在窗口中看到我的摄像头,我可以看到python打印的"frame"),但当它保存文件时,我看不到任何东西。我发现我应该在FourCC中更改编解码器,但这不会改变任何东西。

我的代码:

代码语言:javascript
复制
#!/usr/bin/python

import cv2
import numpy as np

def InitCamera():

    cap = cv2.VideoCapture(0)
    if cap is None:
        print('No camera access')
    else:
        print('Camera init done')
    return cap

def InitWriter():
    fps = 20
    size = (640,480)
    outFile = 'output.mp4'

    #fourcc = cv2.cv.CV_FOURCC('D','I','V','X')
    #fourcc = cv2.cv.CV_FOURCC('R','G','B',' ')
    #fourcc = cv2.cv.CV_FOURCC('Y','U','Y','2')
    #fourcc = cv2.cv.CV_FOURCC('Y','U','Y','U')
    #fourcc = cv2.cv.CV_FOURCC('U','Y','V','Y')
    #fourcc = cv2.cv.CV_FOURCC('I','4','2','0')
    #fourcc = cv2.cv.CV_FOURCC('I','Y','U','V')
    #fourcc = cv2.cv.CV_FOURCC('Y','U','1','2')
    #fourcc = cv2.cv.CV_FOURCC('Y','8','0','0')
    #fourcc = cv2.cv.CV_FOURCC('G','R','E','Y')
    #fourcc = cv2.cv.CV_FOURCC('B','Y','8',' ')
    #fourcc = cv2.cv.CV_FOURCC('Y','1','6',' ')
    #fourcc = cv2.cv.CV_FOURCC('X','V','I','D')
    #fourcc = cv2.cv.CV_FOURCC('M','J','P','G')
    fourcc = cv2.cv.CV_FOURCC('M','P','E','G')

    out = cv2.VideoWriter(outFile, fourcc, fps, size, 1)
    if out is None:
        print('No video access')
    else:
        print('Video init done')
    return out

def CapVideo(cap,out):
    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret==True:
            out.write(frame)
            print('frame')
            cv2.imshow('frame',frame)
            if cv2.waitKey(1) & 0xFF==ord('q'):
                break

        else:
            break
    print 'Done'

    cap.release()
    out.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    cam = InitCamera()
    out = InitWriter()
    CapVideo(cam,out)
EN

回答 1

Stack Overflow用户

发布于 2016-02-16 15:00:26

你有充分的理由去写mp4文件吗?考虑使用avi扩展名写入文件。我也在这个问题上挣扎了很多,在我非常需要一个MP4文件的情况下,我最终用openCV将文件写成avi文件,然后使用ffmpeg进行转换。

我是在C++上开发的,只是简单地进行了一个系统调用。如下所示:

代码语言:javascript
复制
std::string ffmpeg_conversion_cmd = "ffmpeg -y -i data\\intermediate_result.avi -c:v libx264 -crf 19 -preset slow -c:a libfaac -b:a 192k -ac 2 data\\intermediate_result.mp4";
std::system(ffmpeg_conversion_cmd.c_str());

当然,您需要在您的Pi上安装ffmpeg才能做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35418650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档