opencv、Vec2b、Vec3b 中有不同的类型。 Vec4i等等,还有Scalar类型。据我了解,Vec3b 和 Scalar 都是将三个数字存储在一起的类型。因此,如果我想访问一个像素(以 RGB 格式),我只是在编写 image.at <Vec3b> (x,y)=Vec3b ( number, number, number) ,Scalar 也是如此,但是它们有什么区别,甚至有什么区别吗?
我问这个是因为我在使用 Vec3b 和 Scalar 时遇到了一些奇怪的经历,当我起诉 Scalar(我试图将一些像素转换为灰度,但将图像保留为 RGB 格式)时,这样做image.at<Scalar>(x,y)=Scalar( gray_image.at<uchar>(x,y), gray_image.at<uchar>(x,y), gray_image.at<uchar>(x,y));(我有相同的灰度图像,称为 gray_image),但这似乎给出了一些奇怪的结果,另一方面,当我使用 Vec3b 而不是 Scalar 时,我得到了正常的结果。为什么会这样?

最佳答案

根据 http://docs.opencv.org/modules/core/doc/basic_structures.html Scalar_



哪一个


Vec 在哪里:







所以它们是和不一样的。

关于c++ - opencv中的Vec3b和Scalar有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31184282/

10-11 17:32