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.htmlScalar_
是
从
Vec
派生的4元素向量的模板类。
哪个
从
Vec<_Tp, 4>
导出的Scalar_
和Scalar
可以用作典型的四元矢量。此外,它们还可以转换为CvScalar
。类型Scalar
在OpenCV中被广泛用于传递像素值。
其中,作为Vec
:
短数值矢量的模板类,
Matx
:的部分情况
和
Vec
类通常用于描述多通道阵列的像素类型。详见Mat
。
所以它们是一样的,也不一样。