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

标签 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) 的第一个 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/

相关文章:

c++ - 尝试使用线程运行 CamShift

xml - 如何将包含文本文件的文件夹转换为 xml 文件以进行 haar 培训

android - 给大图opencv 4 android添加水印小图

opencv - 当我运行以下代码时,我在内存位置0x003faf00处出现cv::Exception,注意到它完美地运行了一两次

opencv - Opencv中的二维子图像检测

python - 在不同光量下检测颜色 Blob 中心的可靠方法?

c++ - OpenCV 包含错误 "Cannot open source file"

opencv - 如何使用opencv缩放图片的一部分?

python - OpenCV 分割轮廓

python - SimpleCv-IOError (“cannot identify image file”)-来自JpegStreamCamera()-适用于Android的IP网络摄像头