在opencv中Vec3b和Scalar之间有什么区别

What is the difference between Vec3b and Scalar in opencv?

本文关键字:之间 什么 区别 Scalar opencv Vec3b      更新时间:2023-10-16

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

所以它们是一样的,也不一样。