0

検索文字列で特定のキーワードを除外していない限り、フォーラムを徹底的に検索したと思います。投稿を見逃した場合はご容赦ください。私は現在 OpenCV 2.4.0 を使用していますが、単純な問題だと思います。

別の API から取得した符号なし文字配列 (8 ビット、3 チャネル) を取り込み、それを OpenCV マトリックスに入れて表示しようとしています。ただし、表示されるのは正しいサイズの画像ですが、完全に均一なグレーです。これは、間違ったマット名を表示するように指定したときに表示されるのと同じ色です。

相談したことがあります: バイトの文字列を cv::mat に変換し(配列内の文字列を使用)、 opencv カメラデータからマットを作成します(ビンゴだと思っていましたが、画像を適切に表示できないようです) .

一歩下がって、サンプル配列を作成しようとしました(この配列を提供する他の部分を排除するため):

int main() {


bool isCamera = true;

unsigned char image_data[] = {255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255,0,0,255};
cv::Mat image_as_mat(Size(6,3),CV_8UC3,image_data);
namedWindow("DisplayVector2",CV_WINDOW_AUTOSIZE);
imshow("DisplayVector2",image_as_mat);
cout << image_as_mat << endl;

getchar();

}

したがって、最初の行は赤のピクセル、2 番目の行は緑のピクセル、3 番目の行は青の 6x3 マトリックスを作成しています。ただし、これでも同じ空白の灰色の画像になりますが、サイズは正しくなります。

マトリックスの出力は次のとおりです (セミコロンに注意してください。つまり、正しくフォーマットされています)。

[255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0; 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0; 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0, 255]

ここで私は頭がおかしいか、明らかな何かを見逃している可能性があります。正しく表示するには、Mat 内の何かを初期化する必要がありますか? いつもお世話になっている皆様、本当にありがとうございます!

4

1 に答える 1

3

ここでのすべてのブードゥー教はgetchar()、(必要な) の代わりに呼び出すことに要約されます。waitKey()

説明させてください。waitKey はここでは誤称かもしれませんが、実際には必要です。内部のコードがウィンドウのメッセージループをラップし、実際のブリッティングをトリガーするためです (キープレスを待機する以外に)。

それを呼び出さないと、ウィンドウは更新され、グレーのままになります (ここで観察したことです)。

確かに、 cout からの結果を信頼する必要がありました。Mat は適切に構築されましたが、namedWindow には表示されませんでした。

(ところで、getchar()は、img-window ではなく、コンソールウィンドウからのキー押下を待ちます)

それが役立つことを願って、さらに幸せなハッキング;)

于 2013-10-17T18:59:13.430 に答える