我开始使用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。有什么建议或评论为什么会发生这种情况?
答案 0 :(得分:0)
它正在打印一个看起来很差的值,但实际上是正确的。
类型 Vec3b 是具有 3个字节条目的向量,其中这些字节存储为无符号字符值,以表示 0-> 255 颜色范围。您会在控制台中看到205的字节值。
Vec3b对象很可能具有<<覆盖,可以处理打印出供用户读取的值。
尝试将字节类型强制转换为int以查看值:
cout << (int)image.at<Vec3b>(1, 1)[0] << std::endl;