OpenCV C ++中Vec3b和CV_8UC3之间的区别是什么?

时间:2018-06-14 20:45:00

标签: c++ xcode opencv

根据我在网上找到的文档,CV_8UC3是3个8位无符号整数通道。 Vec3b是一个由3个一字节大条目组成的向量。显然它们的大小相同。两种数据类型有什么区别?

为了给问题更多的背景,我正在学习openCV,我正在尝试减去"来自另一个的一个图像。下面是我想要做的一个例子,这段代码有效:

Mat diff(100, 100, CV_8UC3);
for (int r=0; r<100; r++){
    for (int c=0; c<100; c++){
        diff.at<Vec3b>(r,c)[0] = imageA.at<Vec3b>(r,c)[0] - imageB.at<Vec3b>(r,c)[0];
    }
}

对于上面的代码,如果我使用diff构建diff(100, 100, Vec3b);,Xcode会抱怨&#34;期待&#39;(&#39; for function style cast&#34;我相信是一个语法错误。我看了一下构造函数的注释:

@param type Array type. Use CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, or
CV_8UC(n), ..., CV_64FC(n) to create multi-channel (up to CV_CN_MAX channels) matrices.

所以它似乎并没有引入Vec3b。 但是,如果我使用CV_8UC3 .at函数(如diff.at<CV_8UC3>(r,c)有或没有索引括号,Xcode会抱怨&#34;没有匹配的成员函数来调用&#39; at&#39; &#34 ;.我没有找到at的任何评论。

这对我没有意义。为什么创建对象时数据中的数据不能被相同的数据类型访问(CV_8UC3)?这两种数据类型真的不同吗? (因为据说不同的数据类型应该有不同的大小,不应该吗?)

仅供参考:我使用opencv 3.4.1_5,C ++,xcode,mac。

任何提示都将不胜感激!谢谢!

0 个答案:

没有答案