可视化像素与Opencv Mat at

时间:2013-11-20 09:33:34

标签: c++ c opencv

我不明白为什么在运行代码时输出是一个奇怪的数字:

int main(int argc, char** argv)
{
    Mat im;
    im = imread("lena.png", CV_LOAD_IMAGE_GRAYSCALE);
    cout << im.at<uchar>(0, 0) << endl;
    waitKey(0);
}

如果我想象图像,我会看到正确的图像。 我哪里错了?

2 个答案:

答案 0 :(得分:3)

因为它显示符号,例如cout << char(123) << endl;

你必须使用int cast:

cout << (int) im.at<uchar>(0, 0) << endl;

答案 1 :(得分:2)

正如官方documentation所述,你没有直接得到实际的强度值,而是一个标量。

试试这个:

Scalar intensity = im.at<uchar>(0, 0);

cout << intensity.val[0] << endl;

对于可以使用多个频道的图像:

Vec3b intensity = im.at<Vec3b>(0, 0);
cout << intensity.val[0] << intensity.val[1] << intensity.val[2] << endl;