如何在OpenCV 2.4.3中写入视频文件
c++
image-processing
opencv
6
0

我正在使用OpenCV 2.4.3读取和写入视频文件。我的代码是这样的:

cv::VideoCapture video;
video.open ( "D:\\testVideo.avi" );
cv::VideoWriter output;
output.open ( "D:\\outputVideo.avi", CV_FOURCC('D','I','V','X'), 120, cv::Size ( 1200,1600), true );
cv::Mat img;

for ( int n = 0; ; n ++ )
{
     video >> img;
     output.write ( img );
 }

然后结果视频是一个空文件,我无法打开它。我在这里做错了什么?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

问题可能出在您使用的编解码器。

确保您的东西正常工作的简单测试是从网络摄像头中检索帧并将其写入视频文件:

// Load input video
cv::VideoCapture input_cap(argv[1]);
if (!input_cap.isOpened())
{
        std::cout << "!!! Input video could not be opened" << std::endl;
        return;
}

// Setup output video
cv::VideoWriter output_cap(argv[2], 
               input_cap.get(CV_CAP_PROP_FOURCC),
               input_cap.get(CV_CAP_PROP_FPS),
               cv::Size(input_cap.get(CV_CAP_PROP_FRAME_WIDTH),
               input_cap.get(CV_CAP_PROP_FRAME_HEIGHT)));

if (!output_cap.isOpened())
{
        std::cout << "!!! Output video could not be opened" << std::endl;
        return;
}


// Loop to read from input and write to output
cv::Mat frame;

while (true)
{       
    if (!input_cap.read(frame))             
        break;

    output_cap.write(frame);
}

input_cap.release();
output_cap.release();
收藏
评论

您声明帧大小为1200 * 1600的cv::VideoWriter output 。因此,使用cv::resize(img,img,cv::Size(1200,1600));将框架调整为1200 * 1600 cv::resize(img,img,cv::Size(1200,1600));output.write(img);

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号