OpenCV Mat::zeros 不填0
OpenCV Mat::zeros not filled with 0
我有这个代码:
Mat Marker = Mat::zeros(MarkerSize, MarkerSize, CV_8UC1);
cout << "Marker:" << endl;
for (int row=0; row<MarkerSize; row++)
{
for (int col=0; col<MarkerSize; col++)
cout << Marker.at<int>(row, col)<<", ";
cout << endl;
}
其中 MarkerSize=6
和 CV_8UC1
最好不可更改(用于解决方案)。
但我得到了这个输出:
Marker:
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 65536, -1664876544,
0, 0, 0, 1, 1141152964, 289879,
0, 65536, -1664876544, 1817658372, 1531445252, 2147447774,
怎么会这样,我该如何解决?
您的 Mat
对象实例化为 CV_8UC1
,即包含 MarkerSize*MarkerSize
8 位无符号元素。但是你迭代它就好像它是容器int
s,在迭代中越界。例如,通过使用
访问元素
Marker.at<uint8_t>(row, col)
请注意,要打印此内容,您可能必须转换为不同的整数类型,因为 uint8_t
可能会被 std::cout
解释为 char
。例如
cout << static_cast<int>(Marker.at<uint8_t>(row, col)) <<", ";
我有这个代码:
Mat Marker = Mat::zeros(MarkerSize, MarkerSize, CV_8UC1);
cout << "Marker:" << endl;
for (int row=0; row<MarkerSize; row++)
{
for (int col=0; col<MarkerSize; col++)
cout << Marker.at<int>(row, col)<<", ";
cout << endl;
}
其中 MarkerSize=6
和 CV_8UC1
最好不可更改(用于解决方案)。
但我得到了这个输出:
Marker:
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 65536, -1664876544,
0, 0, 0, 1, 1141152964, 289879,
0, 65536, -1664876544, 1817658372, 1531445252, 2147447774,
怎么会这样,我该如何解决?
您的 Mat
对象实例化为 CV_8UC1
,即包含 MarkerSize*MarkerSize
8 位无符号元素。但是你迭代它就好像它是容器int
s,在迭代中越界。例如,通过使用
Marker.at<uint8_t>(row, col)
请注意,要打印此内容,您可能必须转换为不同的整数类型,因为 uint8_t
可能会被 std::cout
解释为 char
。例如
cout << static_cast<int>(Marker.at<uint8_t>(row, col)) <<", ";