我知道很多关于这个论点的帖子,我已经阅读了很多,但我仍然感到困惑。问题是类型(哦,该死的,这是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;
好的,这里是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
抓住它作为一个字符,所以给我看一些无用的非 ascii 符号,所以把它存储在一个int
.
这里的输出:
-1
256
发生了什么?一团糟。为什么-1??或者,为什么是 256?发生了什么事?