6

画像に対してopencv画像処理を行うには、ネットワークカメラからライブMJPEGフッテージを送信しているhttpストリームにアクセスして読み取る必要があります。

VLCを介して、または単にchromeまたはfirefoxのURLにアクセスすることで、カメラの映像にアクセスできます。しかし、サーバーが継続的なフィードを送信しているときに、プログラムでhttpサーバーにアクセスし、各フレームを分離するにはどうすればよいですか?

データは単純にフォーマットされているようで、HTTPヘッダーとJPEGデータの間でループしています。これに取り組む唯一の方法は、サーバーにリクエストを送信し、入ってくるデータを解析し、ヘッダーを実際のjpegデータから分離して、それをopencvに渡すことです。

しかし、それはひどく複雑に聞こえ、どこから始めればよいのかよくわかりません。そこにライブラリがあるかどうか、または私が見落としているより単純なアプローチがあるかどうかを知っていますか?それはこれらすべてを簡単にすることができますか?

どうもありがとう

4

2 に答える 2

7

HTTP ダウンロードには、 Libcurlライブラリを使用できます。

AFAIK MJPEG 形式は標準化された形式ではありません。実際のバイト形式は実装によって異なります。しかし、基本的にはjpegファイルを区切り文字で連結するだけです。16 進エディタでバイトを見ると、各 jpeg ファイルを簡単に区別できます。

たとえば、ffmpeg の mjpeg 出力は次のように構成されます。

0xff 0xd8 // start of jpeg
{ ... }   // jpeg body
0xff 0xd9 // end of jpeg
...
0xff 0xd8 // start of jpeg
{ ... }   // jpeg body
0xff 0xd9 // end of jpeg
...
于 2011-01-26T07:36:32.077 に答える
1

このページでは:

http://thistleshrub.net/www/index.php?controller=posts&action=show&id=2012-05-13DisplayingStreamedMJPEGinJava.txt

MJPEG ストリームを Java で解析します。Java で完璧な結果を得るためにこれを実装しました。

C++ で使用しようとすると、いくつかの見落としがあることがわかります: ソケット接続とレンダリング キャンバス、libcurl は http 要求に対する適切なオプションのようですが、まだキャンバスがありません。GLUT や Qt などを使用できます。

OpenCVがMJPEG Streamerタイプの入力ストリームを読み取ることができるいくつかのフォーラムを読みましたが、それらはOpenCVの最新バージョンである必要があるようです(OpenCVを最初からコンパイルするのは難しいです)。

これが助けになることを願っています。

于 2013-05-09T05:17:25.070 に答える