私はこの議論に関する多くの投稿を知っており、それらの多くを読みましたが、まだ混乱しています. 問題は型です (ああ、いまいましい、これは c です。データ型を処理する必要があります! ;-))。
私は新しい超クールなテンプレート化された C++ API 関数を使用していますat
:
Mat mat32f(3, 3, CV_32F);
for(int i=0; i<3; i++)
for(int j=0; j<3; j++)
mat32f.at<float>(i,j) = i;
cout << "Matrix of type: " << mat32f.type() << endl;
cout << mat32f << endl;
cout << mat32f.at<float>(1,2) << endl;
OK、ここに 1 チャンネルのフロートがあります。問題ありません。出力はクリアです。
Matrix of type: 5
[0, 0, 0;
1, 1, 1;
2, 2, 2]
1
フィルターを作成するだけです:
Mat mask;
inRange(mat32f, 1, 1, mask);
cout << "Mask of type: " << mask.type() << endl;
cout << mask << endl;
ここでは、alles klar、出力はまさに私が望むものです:
Mask of type: 0
[0, 0, 0;
255, 255, 255;
0, 0, 0]
今、特定のポイント(マウスクリック?何でも)が範囲内にあるかどうかを確認したいと思います。
int value2 = mask.at<char>(1,2);
cout << value2 << endl;
unsigned int value3 = mask.at<unsigned int>(1,2);
cout << value3 << endl;
最初のコンピューター サイエンスのクラスで、achar
は an と同じサイズであることを覚えていますunsigned int
(私のマスク タイプは 0 == でCV_8U
あるため)。したがって、char を使用します。しかし、cout
それを char で取得して、役に立たない非 ascii シンボルを見せてくださいint
。
ここに出力:
-1
256
どうした?大混乱。なぜ-1?? または、再び、なぜ 256?? 何が起こった?