C++ 什么';s openCV C+中Vec3b和CV_8UC3之间的差异+;?
根据我在网上找到的文档,CV_8UC3是3个8位无符号整数通道。Vec3b是一个由3个单字节大条目组成的向量。很明显,它们的尺寸是一样的。这两种数据类型之间有什么区别 为了给这个问题提供更多的上下文,我正在学习openCV,并试图从另一个图像中“减去”一个图像。下面是我想做的一个示例,这段代码很有效:C++ 什么';s openCV C+中Vec3b和CV_8UC3之间的差异+;?,c++,xcode,opencv,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++){
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];
}
}
因此,它似乎不被接受。
但是,如果我将CV_8UC3
与.at
函数一起使用,比如diff.at(r,c)
带或不带索引括号,Xcode会抱怨“没有匹配的成员函数来调用'at'”。我在上找不到任何关于的评论
这对我来说没有意义。为什么对象中的数据在创建时不能被相同的数据类型访问(CV_8UC3)?这两种数据类型真的不同吗?(因为假定不同的数据类型应该有不同的大小,不是吗?)
FYI:我使用OpenCV 3.4.1E5,C++,XCODE,MAC。p>
任何提示都将不胜感激!谢谢 CV_8UC3
只是一个数字(特别是16
),而Vec3b
是一个结构。。。它们是完全不同的东西。这就像是问42号和astd::vector
谢谢Miki!那么这是否意味着CV_8UC3
只是传递给Mat-construct的一个标志,以告知使用了哪个结构,而.at
函数不使用这个标志,而是使用实际的结构类型,即Vec3b
?
@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.