完整的源代码如下所示:
#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, ||
谢谢大家对我的帮助!
答案 0 :(得分:0)
Miki的评论是正确的,但这是为什么发生上述错误的说明:
通过以下方式初始化Mat M
时:
Mat M(Size(100, 200), CV_32FC(n_Channel));
M
的Matrix类型设置为32位,并且3通道Mat M
中的每个像素都具有从0到1.0的浮点值。现在要打印Mat M
中的像素值,必须使用正确的说明符,如果是Mat M
,则应为Vec3f
,即< strong>具有3个浮点条目的向量,而不是Vec3b
,即具有3个字节条目的向量(本来适用于CV_8UC3
)。