OpenCV Mat :: zeros没有填0

时间:2015-05-13 20:08:05

标签: c++ opencv unsigned-integer opencv-mat

我有这段代码:

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,

我该怎么办?如何解决?

1 个答案:

答案 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)) <<", ";