C OpenCV:尝试打印垫子值,但要获得空打印

C++ Opencv: Try to print Mat value, but get empty prints

本文关键字:打印 OpenCV      更新时间:2023-10-16

完整源代码如下显示:

#include "opencv2/opencv.hpp"
#include <opencv2/core/core.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char const *argv[])
{
    int n_Channel = 3;
    Mat M(Size(100, 200), CV_32FC(n_Channel));
    cout << M.rows << "," << M.cols << "," << M.channels() << endl;
    for (int i = 0; i < n_Channel; ++i)
    {
        M.at<Vec3b>(4,3)[i] = i+1;
    }
    for (int i = 0; i < n_Channel; ++i)
    {
        cout << "i=" << i << ", " << M.at<Vec3b>(4,3) << endl;
        cout << "i=" << i << ", |" << M.at<Vec3b>(4,3)[i] << "|" << endl;
    }
    return 0;
}

在最后的打印中,我希望看到" i = 0,| 2 |"之类的印刷行。但是,我得到了" i = 0,||",没有任何" |"对。我的代码怎么了?

完整的打印消息如下:

200,100,3
i=0, [1, 2, 3]
i=0, ||
i=1, [1, 2, 3]
i=1, ||
i=2, [1, 2, 3]
i=2, ||

谢谢大家帮助我!

Miki的评论是正确的,但这是一个解释说明发生的原因:

初始化 Mat M by:

Mat M(Size(100, 200), CV_32FC(n_Channel));

M的矩阵类型设置为32位,并且在3个通道Mat M中的每个像素保持在0到1.0之间的浮点值。现在,要在Mat M中打印像素的值,必须使用正确的指定器,如果Mat M,则应是Vec3f,即向量,带有3个float条目而不是在Vec3b中,即具有3个字节条目的向量(非常适合CV_8UC3)。