OpenCV中RGB和HSV轉換的問題

2022-09-06 03:06:05 字數 1298 閱讀 1200

1、一般情況下hsv模型各分量的取值範圍為:h為0到360°,s為0到100%,v為0到255。但是在opencv中在由rgb轉換到hsv的過程中,發現hsv中h為0到180°,s為0到255,v為0到255。**如下:

cvcvtcolor(src ,imghsv,cv_bgr2hsv);//bgr轉換成hsv模型

2、上述儲存的過程中,影象以8位3通道的形式儲存,每個顏色分量占用8位,值的範圍為0到255,所以opencv將h值的範圍縮小了一半,變為0到180°。可以呼叫cvconverscale將影象從8位轉換為32位float型。這樣hsv的範圍就是:h為0到360°,s為0到100%,v為0到255。測試**如下:

mat mat1 = cv::imread("1.png");

cvscalar s1;

cvscalar s2;

cvscalar s3;

iplimage image1 = mat1;

int width = mat1.rows;

int height = mat1.cols;

mat mat2 = mat1.clone();

iplimage image2 = mat2;

cvcvtcolor(&image1,&image2,cv_bgr2hsv);

iplimage* image3 = cvcreateimage(cvgetsize(&image1),ipl_depth_32f,3);

cvconvertscale(&image1,image3,1.0,0); //將src影象從8位轉換成32位float型變數

iplimage* imghsv = cvcreateimage(mat1.size(),ipl_depth_32f,3);

cvcvtcolor(image3,imghsv,cv_bgr2hsv);//bgr轉換成hsv模型

for(int i=0; i3、當進行hsv各分量顯示的時候,可以通過cvsplit函式將各通道分離,然後通過cvconvertscale函式將各分量的範圍都轉化成0到255,在通過8位無符號型影象顯示即可。因為cvshowimage函式只能顯示8位無符號型影象,不能顯示32位float型影象。

4、當進行hsv模型還原到rgb模型時,這裡使用cvcvtcolor函式就要注意,輸入的hsv模型的影象必須將hsv各分量還原到預設的範圍。這樣cvcvtcolor轉換後的rgb影象才是正確的。

參考:

RGB和HSV顏色空間

rgb顏色空間 rgb red,green,blue 顏色空間最常用的用途就是顯示器系統,彩色陰極射線管,彩色光柵圖形的顯示器都使用r g b數值來驅動r g b電子槍發射電子,並分別激發螢光屏上的r g b三種顏色的螢光粉發出不同亮度的光線,並通過相加混合產生各種顏色 掃瞄器也是通過吸收原稿經反射...

RGB和HSV顏色轉換

分類 影象處理 2008 07 21 21 50 2979人閱讀收藏 舉報integer 演算法工具 c360 h引數表示色彩資訊,即所處的光譜顏色的位置。該引數用一角度量來表示,紅 綠 藍分別相隔120度。互補色分別相差180度。純度s為一比例值,範圍從0到1,它表示成所選顏色的純度和該顏色最大的...

RGB和HSV顏色轉換

h引數表示色彩資訊,即所處的光譜顏色的位置。該引數用一角度量來表示,紅 綠 藍分別相隔120度。互補色分別相差180度。純度s為一比例值,範圍從0到1,它表示成所選顏色的純度和該顏色最大的純度之間的比率。s 0時,只有灰度。v表示色彩的明亮程度,範圍從0到1。有一點要注意 它和光強度之間並沒有直接的...