根据我在网上找到的文档,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。
任何提示都将不胜感激!谢谢!