2012-10-19 69 views

回答

8

的cvScalar僅僅是1,2,3或4個浮點值的方便的容器。
數據在這些元組中的含義由cvScalar的用戶決定。
例如,它們可以用來容納,比如說,在平面(2元組),矩形(4元組),RGB顏色(3元組), 三維世界中的點(三元組)等。cvScalar系統地實現爲4元組,其中未使用的值設置爲0。

回答有關RGB彩色的黑色的問題:

cvScalar cBlack = new cvScalar(0, 0, 0, 0); 
// BEWARE: the params for the cvScalar constructor are not in RGB order 
//   it is: new cvScalar(blue, green, red, unused) 
// note how the 4th scalar is unused. 

備選地可以使用CV_RGB()便捷方法如:

CvScalar cBlack = CV_RGB(0, 0, 0); 
// here the CV_RGB() arguments are in Red, Green, Blue order. 

編輯:因爲上面的例子中是對於所有顏色分量具有相同值的顏色黑色,其未能證明存儲在CvScalar內的RGB分量的順序與常規順序Red,Green,Blue相反。
CV_RGB()便利方法的參數採用常規的RGB順序,但cvScalar中的存儲爲藍色,綠色,紅色順序。
換句話說,CV_RGB的定義如下:

public static CvScalar CV_RGB(double r, double g, double b) { 
    return cvScalar(b, g, r, 0); 
} 

或者說還沒有,否則,cvScalar(0, 1, 130, 0)相當於CV_RGB(130, 1, 0),即紅色,與綠色一分鐘聯繫。

除了CV_RGB(),使用cvScalars爲顏色值的目的時,也可以方便地使用cvScalar.Red()cvScalar.Blue()cvScalar.Green()方法提取的各個部件,而不必擔心這些被存儲在哪裏。該類還包括每種常見顏色的幾個靜態實例:cvScalar.GRAY,cvScalar.YELLOW,cvScalar.BLUE

+0

請問可以告訴我cvScalar(0,0,130,0)的CV_RGB()值是否相等。 – LkDev

+1

@LkDev:參見編輯並添加註釋,明確強調RGB顏色以cvScalar內的BGR順序存儲。 – mjv

1

cvScalar是一個4雙打的通用數組。數據類型通常用於表示像素值,例如:

CvScalar blue = CV_RGB(64, 64, 255); 

剩餘雙打在該採取少於4個值的構造函數設置爲0。

cvGet2D的是,在形式CvScalar

的讀取各個像素與cvGet2D()函數

CvScalar cvGet2D(常量CvArr *最簡單的方式將返回的像素值的另一個函數, int row,int col);

該函數有三個參數:一個指向數據容器(CVArr *)的指針和行列位置的數組索引。數據容器可以是IplImage結構。最上面一行像素是行= 0,最下面是行=高度-1。

的cvGet2D()函數返回一個C結構,CvScalar,定義爲

typedef結構CvScalar { 雙VAL [4]; } CvScalar;

每個通道的像素值都在val [i]中。對於灰度圖像,val [0]包含像素>亮度。其他三個值設置爲0.對於三通道BGR圖像,blue = val [0],> green = val [1]和red = val [2]。

http://www.cognotics.com/opencv/servo_2007_series/part_1/page_4.html

相關問題