2012-04-15 11 views
1

私はopencvのVideoWriterを使ってビデオを書き込もうとしています。ここでは、コードがあります:ビデオ内のシフトされた画像

int main() { 
    //read image from file: 
    Mat image(cvLoadImage("temp.bmp")); 
    //create videowriter (DivX codec): 
    VideoWriter record("output.avi", CV_FOURCC('D','I','V','X'), 30, image.size(), true); 
    for (int i=0; i<100; ++i) { 
     //write frame to video: 
     record<<image; 
    } 
} 

は、これは私が書くしようとしていることをイメージ(temp.bmp)、次のとおりです。 input

(私は、元のBMPファイルをアップロードすることができますが、このPNG結果は同じであってもで - 下記参照)。

しかし、私はビデオ(output.avi)を開いたとき、私はこれを参照してください。ビデオはそれほどずれているのはなぜ enter image description here

を? different codecsを試してみてcvtColor(CV_BGR2xxx)を使用していますが運がない場合は画像を別のタイプに変換しました。

バグを報告するタイミングはありますか?

+0

あなたは 'DIB' フォーマットを試みたことがありますか? – Eric

+0

@エリック、返信ありがとうございます。私はCV_FOURCC( 'D'、 'I'、 'B'、 '') 'を試しましたが、このエラーが発生しました:' OpenCV Error:サポートされていないフォーマットまたはフォーマットの組み合わせです(Gstreamer Opencvバックエンドはこのコーデックをacutallyサポートしていません。 CvVideoWriter_GStreamer :: open'にあります。私は何かが間違っていた? – ArtemStorozhuk

+1

何が悪いと言うのは非常に困難です。しかし、CvLoadImageがビットマップファイル内の行パッディングを削除できないことが原因である可能性があります。幅が4の倍数の異なる.bmpイメージを試すことができます(この場合、行の埋めはありません)。そして、違いがあるかどうかを確認します。 – nac

答えて

0

私はこの問題をOpenCV 2.4.1でテストしました(以前はバージョン2.3.1でテスト済みでした)。それはバグだったようだ。

+0

ところで、それは間違った行のストライドのように見えました。 – Florian

0

私はあなたと同じ問題を抱えて:

VideoWriter out_capture("video.avi",CV_FOURCC('M','J','P','G'), 30, RESULTS[0].size() ,true); 

for(int i = 0 ; i < RESULTS.size() ; i++) 
{ 
    Mat img; 
    RESULTS[i].copyTo(img); 

    if(img.empty()) 
     break; 
    out_capture << img; 
} 

RESULTSはすべての私のイメージを格納するベクトルです。ここで

は、ビデオのフレームです:私が欲しいもの enter image description here

はこれです: enter image description here

関連する問題