c++ - OpenCV输出奇数像素值

标签 c++ opencv image-processing

我想用 C++ 对图像进行处理,一直在使用 OpenCV。在尝试单独访问每个像素时,我有点卡住了。我可以使用以下方法输出整个灰度图像:

cout << image;

并像这样获得值的预期输出:

[143, 147, 164, 177, 177, 185, 196, 195, 185, 186, 178, 190, 178, 163, 183...

但是当我尝试使用以下方法一次输出一个像素时:

for (int y = 0; y < image.rows; ++y) {
    for (int x = 0;x < image.cols; ++x) {
        std::cout<<image.at<double>(y, x)<<" ";
    }
            cout << endl;}

我的输出是一堆像这样的大数字:

-2.98684e+18 -1.21685e-83 -1.91543e-113 -1.8525e-59 -2.73052e-127 -2.08731e-35 -3.72066e-103 ...

关于我遗漏了什么或做错了什么有什么想法吗?

最佳答案

因为你的值 [143, 147, 164, 177...] 看起来像 uchar 类型,你的 Mat 类型应该是 CV_8U=0 或 CV_8UC3=16,你可以用 image.type() 检查。 所以你的输出应该是(正如@Micka 指出的那样)

std::cout<<image.at<uchar>(y, x)<<" "; // gray
or
std::cout<<image.at<Vec3b>(y, x)<<" "; // color

以后只要使用这个就不用再担心类型了:

Rect rect(0, 0, 10, 10); // print 10x10 block
cout<<image(rect)<<endl;

并不是说知道类型不重要。

关于c++ - OpenCV输出奇数像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570107/

相关文章:

c++ - -static-libstdc++ 适用于 g++ 但不适用于纯 gcc?

c++ - decltype(foo(1)) 应该实例化 constexpr 函数模板 foo 吗?

python - std::reference_wrapper 是否类似于 python 的传递对象引用?

c++ - cygwin 异常堆栈转储文件错误?

java - 获取图像中文本的像素位置

python - OpenCV imwrite 函数导致 'undefined symbol'

opencv - 合并两个或多个部分重叠的图像

c++ - OpenCV:期望最大化的预测函数的输出

python - 使用递归插值计算平滑颜色图

c - 大津阈值化