2016-08-12 67 views
4

当我在函数中使用:'x'.write(frame)写入opencv中的视频文件时,程序传递代码并且我没有错误地编译它,但是当我打开文件时,我看到它是0kb,播放器无法播放它。 有人可以帮我吗?为什么函数'x'.write(frame)对我不起作用?

这里我的代码:

// Setup output video 
    cv::VideoWriter output_cap("output.avi", 
     CV_CAP_PROP_FOURCC, 
     CV_CAP_PROP_FPS, 
     cv::Size(1376, 768)); 


    // Loop to read frames from the image and write it to the output capture 
    cv::Mat frame = imread("1.jpg", 0); 
    for(int hgf=1;hgf<=300;hgf++) 
    { 

     if (!frame.data) 
     { 
      break; 
     } 

      output_cap.write(frame); 

    } 

好日子大家!

+0

检查此:[** OpenCV VideoWriter不会写任何**](http://stackoverflow.com/questions/12054907/opencv-videowriter-wont-write-anything-although-cvwritetoavi-does) –

+0

我怀疑打开文件“1.jpg”失败,所以没有什么可写的。从确保它正确打开开始。 – molbdnilo

+0

它是开放的“1.JPG”我检查了它。 –

回答

2

我将我的代码更改为此,我将图像更改为较小的图像,它的工作!

我的代码:

cv::Mat frame = imread("01.jpg",1); 
VideoWriter output_cap("output.avi", CV_FOURCC('M', 'J', 'P', 'G'), 1, 
frame.size(),true); 

for (int hgf = 1; hgf <= 10; hgf++) { 
output_cap.write(frame); 
std::cout << "-"; 
} 

的问题是,我的形象是4608x3456和OpenCV的水湿使用此文件中创建一个视频。我改成752x515这个工作!美好的一天!!!!!!

+1

虽然可以回答自己的问题,但如果您的答案与您已有的答案非常接近,Stack Overflow礼仪将接受该答案,并可能发表评论。 Re:4608x3456,OpenCV在我的Ubuntu 12.04机器上用这个分辨率处理了一张测试图像。 (电影播放器​​无法播放最终的视频,但Avidemux可以) –

+0

@UlrichStern我同意你的评论,但我告诉我的答案,我没有注意到我写了一个答案,但无论如何我离开它,因为代码已经为我工作与更多细节。美好的一天! –

+0

@UlrichStern尽管如此,提问者没有义务接受答案。 –

2

我认为最主要的问题是您的代码将错误的FOURCC值传递给VideoWriterCV_CAP_PROP_FOURCC(#defined为6)用于为FOURCC属性命名,但它不是一个合适的值。类似地,CV_CAP_PROP_FPS(#defined为5),但这里的效果只是告诉VideoWriter使用5.0 fps。

这个工作对我来说:

#include <stdio.h> 
#include <opencv2/opencv.hpp> 

using namespace cv; 
using namespace std; 

int main(int argc, char** argv) 
{ 
    if (argc != 2) { 
     cout << "image required" << endl; 
     return -1; 
    } 
    Mat frame = imread(argv[1], 1); 

    VideoWriter output_cap("output.avi", CV_FOURCC('M','J','P','G'), 15, 
     frame.size()); 

    for(int hgf=1; hgf<=300; hgf++) { 
     output_cap.write(frame); 
    } 

    return 0; 
} 

注:在Linux上,VideoWriter的视频格式的支持是如此,所以在我的经验。对于两种广泛使用的格式M-JPEG(以上使用)和H.264,M-JPEG在OpenCV 2.4中运行良好,但对于2.4和3而言,3.X和H.264的失败方式与此question相同。 X。