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=6CV_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 位无符号元素。但是你迭代它就好像它是容器ints,在迭代中越界。例如,通过使用

访问元素
Marker.at<uint8_t>(row, col)

请注意,要打印此内容,您可能必须转换为不同的整数类型,因为 uint8_t 可能会被 std::cout 解释为 char。例如

cout << static_cast<int>(Marker.at<uint8_t>(row, col)) <<", ";