0

ビデオデータをffmpegでデコードした後、opencvで保存する形式を誰か教えてください。つまり、マトリックスとして保存されている場合、8ビット/ピクセルのようなものですか? 誰かが詳細を説明するドキュメントまたはリンクを提供できる場合は、大きな助けになります。私もググってみましたが、関連するものが見つかりませんでした。

ありがとう。

4

1 に答える 1

2

調べるための決定的な参照は、おそらくコードそのものです! CvCapture_FFMPEG::openファイル内の関数を見てくださいmodules/highgui/src/cap_ffmpeg_impl.hpp。このメソッドは、たとえばcvCaptureFromAVI()およびによって呼び出されcvCaptureFromFile()ます。以下に抜粋されたコードは、ファイルから幅と高さを明確に取得しますが、入力ビット深度を無視し、メモリ内のビデオのパックされた 8:8:8 ビット RGB 表現を常に使用します (PIX_FMT_BGR24定数で示されます)。

#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0)
    int err = avformat_open_input(&ic, _filename, NULL, NULL);
#else
    int err = av_open_input_file(&ic, _filename, NULL, 0, NULL);
#endif

    .......    

#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 3, 0)
    avformat_find_stream_info(ic, NULL);
#else
    av_find_stream_info(ic);
#endif

    .......    

    avpicture_fill( (AVPicture*)&rgb_picture, rgb_picture.data[0],
                    PIX_FMT_BGR24, enc->width, enc->height );

これが事実であることのさらなる証拠は、 の次のコードによって提供されますCvCapture_FFMPEG::retrieveFrame

img_convert_ctx = sws_getCachedContext(
                NULL,
                video_st->codec->width, video_st->codec->height,
                video_st->codec->pix_fmt,
                video_st->codec->width, video_st->codec->height,
                PIX_FMT_BGR24,
                SWS_BICUBIC,
                NULL, NULL, NULL
                );

ffmpeg のドキュメントを見ると、PIX_FMT_BGR24この呼び出しの は宛先のピクセル形式、つまり opencv に渡されるものを指定しています。

于 2013-02-15T07:23:48.910 に答える