程序如下:
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat temp2(5, 5, CV_8UC1, Scalar(255));
for (int i=0; i<temp2.rows; i++) {
for (int j=0; j<temp2.cols; j++) {
cout << temp2.at<uchar>(i,j) << endl;
}
}
return 0;
}
编译运行的时候, 发现输出显示异常, 即未出现预期的25个255:
问题产生的原因是矩阵的元素是uchar 的类型, 一个uchar占据1 byte, 记得吗, opencv manual中有一句话, 就是 只有你知道矩阵元素的type的时候, 才可以使用at。 上例子中之所以未出现255的输出结果, 是因为uchar 是无符号的char, 也是integer type, 流符号 << 会打印出该元素代表的character, 所以当然就不会出现a sequence of digits, 由于255对应的ASCII 字符没有, 当然什么都不会被打印出来。 所以我们需要进行转型为int 才能正常输出数子。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat temp2(5, 5, CV_8UC1, Scalar(255));
for (int i=0; i<temp2.rows; i++) {
for (int j=0; j<temp2.cols; j++) {
cout << (int)temp2.at<uchar>(i,j) << endl;
}
}
return 0;
}
于是输出结果如下: