opencv,Vec2b和Vec3b中有不同的类型。Vec4i等,并且有标量类型。据我了解,Vec3b和Scalar都是将三个数字存储在一起的类型。因此,如果我要访问一个我所写的像素(RGB格式)image.at <Vec3b> (x,y)=Vec3b ( number, number, number)
,Scalar也是一样,但是它们之间有什么区别,甚至还有区别吗?
我问这个问题是因为我在使用Scalar时(我正在尝试将一些像素转换为灰度,但将图像保留为RGB格式)时,使用Vec3b和Scalar有一些奇怪的经验
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时,我得到的是正常结果。为什么会这样呢?
我需要能够处理某些区域是灰度的图像,而其他区域保持RGB格式.我不想将图像转换为灰度,因为它会丢失通道并且将变成简单的通道,有没有办法保持图像上某些像素的RGB通道并将其他像素转换为灰度?