0

私のプロジェクトの一環として、WebSocket を使用して組み込みマシンからクライアント アプリケーションに画像のストリームを送信し、それらをimgタグで表示してストリーミングを実現したいと考えていました。

最初に生のRGBデータ(752 * 480 * 3 - 約1MB)を送信しようとしましたが、最終的にRGB画像に基づいてjavascriptで画像をpngにエンコードする際に問題が発生したため、データをPNGにエンコードしようとしましたまず、websockets を使用して送信します。

OpenCV問題は、プロジェクトで既に使用されているライブラリを使用してデータを PNG にエンコードする際に問題が発生していることです。

まず、いくつかのコード:

websocketBrokerStructure.matrix = cvEncodeImage(0, websocketBrokerStructure.bgrImageToSend, 0);
websocketBrokerStructure.imageDataLeft = websocketBrokerStructure.matrix->rows * websocketBrokerStructure.matrix->cols *  websocketBrokerStructure.matrix->step;
websocketBrokerStructure.imageDataSent = 0;

しかし、2行目の実行中に奇妙なエラーが発生します:

terminate called after throwing an instance of 'std::logic_error'
what():  basic_string::_S_construct NULL not valid

コードからこのエラーが発生する理由が少しわかりません。

また、私はそれを正しく理解しているかどうか疑問に思っています.cvEncodeImageを呼び出した後(3つのチャネルがある場所-BGR bgrImage) 、すべてのpngエンコードデータを取得するには、私のメンバーIplImage*を反復処理する必要がありますか?dataCvMat

4

1 に答える 1

1

このcvEncodeImage関数は、エンコードする画像の拡張子を最初のパラメーターとして受け取ります。あなたは を渡しています。0これは と同じことですNULL。そのため、メッセージが表示されますNULL not valid

おそらくこれを使用する必要があります:

websocketBrokerStructure.matrix = cvEncodeImage(".png", websocketBrokerStructure.bgrImageToSend, 0);

cvEncodeImage hereのドキュメントを確認できます。

のいくつかの例cvEncodeImage、またはその C++ 兄弟imencodeをここで確認できます: encode_decode_test.cppcvEncodeImageまた、調整したい場合に渡すことができるいくつかのパラメーターも示しています。

于 2013-08-03T18:14:05.060 に答える