2016-08-12 2 views
4

opencvのビデオファイルへの書き込みに 'x'.write(frame)関数を使用すると、プログラムはコードを渡してエラーなしでコンパイルしますが、ファイルを開くと0 kbとプレーヤが表示されますそれを再生することはできません。 誰かが私を助けることができますか?関数 '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

私は主な問題は、コードがVideoWriterに不正なFOURCC値を渡すことだと思います。 CV_CAP_PROP_FOURCC(#は6として定義されています)は、FOURCCプロパティの名前を持つために使用されますが、適切な値ではありません。同様にCV_CAP_PROP_FPS(#は5と定義されています)でも同様ですが、ここでの効果は単にVideoWriterに5.0fpsを使用するように指示しています。

これは私の作品:

#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のサポートは、私の経験ではまあまあです。 2つの広く使用されている形式のM-JPEG(上記で使用されていた)とH.264の場合、M-JPEGはOpenCV 2.4ではうまく機能しましたが、3.Xではなく、H.264は2.435と3の両方についてquestionと同じ方法で失敗しました。バツ。

関連する問題