歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenCV中顏色漫談

OpenCV中顏色漫談

日期:2017/3/1 10:10:38   编辑:Linux編程

不知道大家有沒有注意到OpenCV(包括C和C++版本,根據本人的熟悉程度,以下只對C接口的OpenCV做敘述)中沒有表示顏色的數據結構,而其他的庫如Qt中就有QColor和QRgb,GDI中也有COLORREF和RGBQUAD。不過OpenCV中只是沒有明確的顏色數據結構而已(即無CvColor,CvRgb或CvHsv等),但可以用CvScalar表示顏色,也可以用CV_RGB宏來定義顏色,實際上CV_RGB也是由CvScalar來實現的。

  1. #define CV_RGB( r, g, b ) cvScalar( (b), (g), (r) )
CvScalar類型變量表示顏色的函數舉例:
  1. //其中CvScalar color表示線條的顏色
  2. void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,
  3. int thickness=1, int line_type=8, int shift=0 );
  4. //當CvArr為IplImage時,返回的就是指定坐標處的顏色值
  5. CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 );
  6. //當CvArr為IplImage時,就是利用CvScalar value表示的顏色值設置整個圖像
  7. void cvSet( CvArr* arr, CvScalar value, const CvArr* mask=NULL );

為什麼OpenCV不設計一個單獨CvColor類(CvPixel,Color或Pixel)呢?其可以附件許多的功能,比如可以有如下的成員函數:

  1. getChannelNumber()
  2. getTotalDepth()
  3. getR()
  4. getG()
  5. getB()
  6. getRGB(r,g,b)
  7. toHSV()
  8. toGray()
  9. toXYZ()
  10. .....
為什麼不設計獨立的顏色類,而用CvScalar代勞,這是一個問題?歡迎回復!

此外還注意到OpenCV中對顏色屬性的一些特點:

  1. 最大的通道數為512(見CV_CN_MAX),不過OpenCV中大部分的函數只支持1,2,3,4個通道的圖像。
  2. 每通道的位數(即位深度)相同,另外OpenCV的位深度(IplImage::depth)指的是單一通道的位深度,而GDI中位深度(BITMAPINFOHEADER::biBitCount)指的是所有通道的位深度之和。
  3. 只支持RGB顏色空間(顏色模型)
Copyright © Linux教程網 All Rights Reserved