linux opencv videocapture保存视频大小始终为5.7kb/6kb——解决办法

用opencv的videocapture把videocapture读入的数据保存成新的视频,代码很简单,首先打开一个输出视频流:

cv::VideoWriter video(video_name, CV_FOURCC('M','J','P','G'), 30, cv::Size(640,480), false);

然后往里写数据:

video << frame;

最后关闭视频流:

video.release()

上面是核心代码,注意,size可以通过cap设置属性,这样会更好些

cv::VideoWriter video(video_name, CV_FOURCC('M','P','4','V'), 30, cv::Size(cap.get(3),cap.get(4)), true);

But,我写入的视频大小始终是5.7kb,上网查找后,很多人对这个问题展开讨论:

https://github.com/ContinuumIO/anaconda-issues/issues/223
在这里插入图片描述
上面是一些不错的建议,供参考。

看完这些回答,还是没能解决我的问题。

继续搜罗答案:

http://cn.voidcc.com/question/p-kaflvmog-rt.html

在这里插入图片描述
于是我把视频编码格式改成了mp4v:

cv::VideoWriter video(video_name, CV_FOURCC('M','P','4','V'), 30, cv::Size(640,480), false);

但还是老问题。
后来,我发现VideoWriter构造函数的最后一个参数“isColor”,在我的程序里设成false是有问题的,因为我的input是3通道的彩色图,于是换成true:

    cv::VideoWriter video(video_name, CV_FOURCC('M','P','4','V'), 30, cv::Size(640,480), true);

问题解决!

总结:

  1. 检查视频编码格式,大概率是MJPEG格式不被机器支持(哪怕装了FFMPEG并且FFMPEG is working well),尝试下其他的格式。
  2. 如果你的input image是彩色图,那么不要把videowriter的构造函数最后一个参数的isColor设为false,要设成true才可以。false只针对灰度图。
  3. 视频后缀就用.avi,它是个container,codec(编解码器)才是important thing!
  4. videowriter构造函数中设置的video size要和实际写入的image size match,否则不会写入正确的视频
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值