我开始使用 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) 的第一个 channel 时,我得到了一个奇怪的值。与此相反,我可以一次打印所有三个。我什至可以使用相同的语法更改 channel 1 中像素 (1,1) 的值。
我使用 visual Studio 和 OPENCV 的 Vesion 3.4.1。为什么会发生这种情况有什么建议或意见吗?
最佳答案
它打印的值看起来很糟糕,但实际上是正确的。
Vec3b 类型是具有3 字节条目 的向量,其中这些字节存储为无符号字符值以表示0 -> 255 颜色范围。您在控制台中看到字节值 205。
Vec3b 对象很可能覆盖了 << 以处理打印出供用户阅读的值。
尝试将字节类型转换为 int 以查看值:
cout << (int)image.at<Vec3b>(1, 1)[0] << std::endl;
关于opencv - 在 OPENCV 中打印出矩阵值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51289114/