视频没有写入文件
video is not being written to file
我使用opencv直接从网络摄像头捕获视频并将其保存到avi文件。我使用了以下代码:
#include "StdAfx.h"
using namespace std;
using namespace cv;
int _tmain()
{
VideoCapture src;
src.open(1);
if(!src.isOpened())
{
cout<<"could not open cameran";
return -1;
}
else
{
cout<<"camera openedn";
}
int ex=static_cast<int>(src.get(CV_CAP_PROP_FOURCC));
Size s(Size((int)src.get(CV_CAP_PROP_FRAME_WIDTH),(int)src.get((CV_CAP_PROP_FRAME_HEIGHT))));
VideoWriter out;
out.open("out.avi",ex,20,s);
while(1)
{
Mat im;
src>>im;
imshow("vid",im);
out<<im;
char c;
c=cvWaitKey(50);
if(c==27)
break;
}
system("pause");
}
所有的头文件都包含在stdafx.h中。但实际上我得到的是一个大小为0bite的avi文件。如何解决这个问题?我需要录制不显示的摄像头视频
注意:我是openCV的新手,我正在使用Visual Studio 2010
要运行应用程序而不显示摄像头只需删除
imshow("vid",im);
和。avi的大小为0,因为您在应用程序运行时打开它(当您打开视频流并在其上写入时),要打开您录制的视频,只需关闭应用程序以结束对视频的写入,然后打开它
实际上您的程序中没有逻辑错误。唯一的问题是你用来写视频的FOUR_CC
编解码器。
当我运行你的代码时,我遇到了和你一样的问题。当我将错误检查添加到out.open()
函数时,我发现了问题。
很可能,相机的FOUR_CC编解码器不被avi容器支持。
当您使用Windows时,一个好的选择是在out.open
的第二个参数中使用CV_FOURCC_PROMPT
。
这将打开一个弹出列表框,其中包含不同的FOUR_CC编解码器可用。如果你不知道该选哪个,就选Full Frames (Uncompressed)
。这是最兼容的选项,但会增加输出视频文件的大小。
最后的代码应该是这样的:
if(!out.open("out.avi",CV_FOURCC_PROMPT,20,s))
{
cout<<"Writer Not Opened"<<endl;
return -1;
}
相关文章:
- 如何在 c++ 中通过 http 发送大型视频文件?
- 媒体基础将音频流添加到视频文件
- 帧提取 使用OpenCV的视频文件开头只有几秒钟
- 使用 OpenCV C++ 每 1 分钟创建新的视频文件
- 如何检查给定文件是否是C++中的有效视频文件?
- 媒体基础获得视频文件的精确帧(样本)计数
- 如何在不重写整个视频文件的情况下仅替换流中的一个数据框架?(ffmpeg)
- 创建可用的H.264视频文件
- 如何避免在 c++ 中使用 libssh scp 命令压缩从远程 ssh 下载的图像、音频和视频文件?
- 如何使用Windows Media Foundation直接将视频文件直接解码为Direct3D11纹理
- 无法从文件中读取视频,而可以从相机读取
- ARtoolkit加载从4k相机索尼捕获的视频文件
- 视频编写器功能不会使用 OpenCV-3.0.0 保存文件
- 读取视频文件"Open CV WARNING: Couldn't read movie file bird.avi"时出现问题
- 将视频文件的帧总数保存到.txt文件中
- 使用OpenCV从文件中更改视频捕获上的fps
- openCV读取.avi文件的视频捕获获取空框架
- 从OpenCV C 中的视频文件中检索每三个帧
- 使用来自视频文件或网络摄像头的 Kinect 面部跟踪
- 从文件OpenCV读取视频