OpenCV中颜色漫谈
不知道大家有没有注意到OpenCV(包括C和C++版本,根据本人的熟悉程度,以下只对C接口的OpenCV做叙述)中没有表示颜色的数据结构,而其他的库如Qt中就有QColor和QRgb,GDI中也有COLORREF和RGBQUAD。不过OpenCV中只是没有明确的颜色数据结构而已(即无CvColor,CvRgb或CvHsv等),但可以用CvScalar表示颜色,也可以用CV_RGB宏来定义颜色,实际上CV_RGB也是由CvScalar来实现的。
- #define CV_RGB( r, g, b ) cvScalar( (b), (g), (r) )
- //其中CvScalar color表示线条的颜色
- void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,
- int thickness=1, int line_type=8, int shift=0 );
- //当CvArr为IplImage时,返回的就是指定坐标处的颜色值
- CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 );
- //当CvArr为IplImage时,就是利用CvScalar value表示的颜色值设置整个图像
- void cvSet( CvArr* arr, CvScalar value, const CvArr* mask=NULL );
为什么OpenCV不设计一个单独CvColor类(CvPixel,Color或Pixel)呢?其可以附件许多的功能,比如可以有如下的成员函数:
- getChannelNumber()
- getTotalDepth()
- getR()
- getG()
- getB()
- getRGB(r,g,b)
- toHSV()
- toGray()
- toXYZ()
- .....
此外还注意到OpenCV中对颜色属性的一些特点:
- 最大的通道数为512(见CV_CN_MAX),不过OpenCV中大部分的函数只支持1,2,3,4个通道的图像。
- 每通道的位数(即位深度)相同,另外OpenCV的位深度(IplImage::depth)指的是单一通道的位深度,而GDI中位深度(BITMAPINFOHEADER::biBitCount)指的是所有通道的位深度之和。
- 只支持RGB颜色空间(颜色模型)
相关推荐
liugan 2020-03-06
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20