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时,我得到了正常的结果。为什么会这样?
答案 0 :(得分:3)
根据http://docs.opencv.org/modules/core/doc/basic_structures.html A Vec
是
从
Vec<_Tp, 4>
派生的4元素向量的模板类。
哪些
源自
Scalar_
,Scalar
和CvScalar
可以用作典型的4元素向量。此外,它们可以转换为Scalar
。类型Vec
在OpenCV中广泛用于传递像素值。
Matx
的位置是:
短数值向量的模板类,
Vec
的部分情况:
和
Mat
类通常用于描述多通道数组的像素类型。有关详细信息,请参阅RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
。
所以他们是和不一样的。