我有这段代码:
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,
我该怎么办?如何解决?
答案 0 :(得分:4)
您的Mat
对象使用CV_8UC1
进行实例化,即包含MarkerSize*MarkerSize
8位无符号元素。但是你迭代它就像容器int
一样,超出迭代范围。例如,通过
Marker.at<uint8_t>(row, col)
请注意,要打印此内容,您可能需要转换为其他整数类型,因为uint8_t
可以由std::cout
解释为char
。例如
cout << static_cast<int>(Marker.at<uint8_t>(row, col)) <<", ";