1

我有这个代码:

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;
}

whereMarkerSize=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,

怎么会,我该如何解决?

4

1 回答 1

4

您的Mat对象是用 实例化的CV_8UC1,即包含MarkerSize*MarkerSize8 位无符号元素。但是你像容器一样迭代它int,在迭代中越界。例如,通过访问元素

Marker.at<uint8_t>(row, col)

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

cout << static_cast<int>(Marker.at<uint8_t>(row, col)) <<", ";
于 2015-05-13T20:11:08.877 回答