2016-08-12 68 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。