C++ 什么';s openCV C+中Vec3b和CV_8UC3之间的差异+;?

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++){

根据我在网上找到的文档,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];
    }
}
因此,它似乎不被接受。 但是,如果我将
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号和a
std::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.