在OPENCV中打印出矩阵值不起作用

时间:2018-07-11 15:21:04

标签: opencv

我开始使用OPENCV,首先测试一些基本 命令。目前,我尝试打印出jpg图像的特定值。我已经阅读了几篇文章,并构建了以下C ++程序。

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

int main()  //(int argc, char** argv)
{
    Mat image;
    image = imread("Desert.jpg", IMREAD_COLOR);
    cout << image.at<Vec3b>(1, 1)[0] << std::endl;
    cout << image.at<Vec3b>(1,1) << std::endl;
    image.at<Vec3b>(1, 1)[0] = 10;
    cout << image.at<Vec3b>(1, 1) << std::endl;
    return 0;
}

终端的输出是

▒
[205, 123, 51]  
[10, 123, 51]

因此,当打印出像素(1,1)的第一个通道时,我得到一个奇怪的值。与此相反,我可以一次打印所有三个。我什至可以使用相同的语法更改通道1中的pixel(1,1)的值。

我使用OPENCV的visual Studio和Vesion 3.4.1。有什么建议或评论为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

它正在打印一个看起来很差的值,但实际上是正确的。

类型 Vec3b 是具有 3个字节条目的向量,其中这些字节存储为无符号字符值,以表示 0-> 255 颜色范围。您会在控制台中看到205的字节值。

Vec3b对象很可能具有<<覆盖,可以处理打印出供用户读取的值。

尝试将字节类型强制转换为int以查看值:

cout << (int)image.at<Vec3b>(1, 1)[0] << std::endl;