opencv HSV色彩空間 追蹤特定顏色

2021-10-11 01:51:52 字數 1922 閱讀 4451

hsv(hue, saturation, value)是根據顏色的直觀特性由a. r. smith在2023年建立的一種顏色空間, 也稱六角錐體模型(hexcone model)。、這個模型中顏色的引數分別是:色調(h),飽和度(s),亮度(v)。

色調h:用角度度量,取值範圍為0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°。它們的補色是:黃色為60°,青色為180°,品紅為300°;

飽和度s:取值範圍為0.0~1.0;

亮度v:取值範圍為0.0(黑色)~1.0(白色)。

如圖所示: 這個錐體的高表示亮度,越往上越亮,取值範圍【0,1】;

中心到邊緣的距離表示飽和度,越靠邊飽和度越大,取值範圍【0,1】;

旋轉角度表示的是色調,範圍【0,360】;

opencv 在上面的範圍基礎上進行了轉化。

h: 0— 180 (即h = h / 2)

s: 0— 255 (即s = s * 255)

v: 0— 255 (即v = v * 255)

opencv中有超過150種顏色空間轉換方法。最廣泛使用的,bgr↔灰色和bgr↔hsv。

對於顏色轉換,我們使用cv函式。cvtcolor()

cv_exports_w void

cvtcolor

( inputarray src, outputarray dst,

int code,

int dstcn =0)

;@param src //輸入影象:8位無符號,16位無符號(cv_16uc ...)或單精度浮點數。

@param dst //輸出影象的大小和深度與src相同。

@param code //顏色空間轉換**(請參見#colorconversioncodes)。

@param dstcn //目標影象中的通道數;如果引數為0,則通道是自動從src和**派生的。

對於bgr→灰度轉換,我們使用標誌cv::color_bgr2gray。

對於bgr→hsv,我們使用標誌cv::color_bgr2hsv。

如果將#cvtcolor用於8bit影象,轉換會損失一些資訊。建議先轉化為cv_32f

@code

img *=1.

/255

;cvtcolor

(img, img, color_bgr2luv)

;@endcode

現在我們知道了如何將bgr影象轉換成hsv,我們可以使用它來提取乙個有顏色的物件。在hsv中比在bgr顏色空間中更容易表示顏色。下面我們將嘗試提取中紅色部分。

方法如下:

cv_exports_w void

inrange

(inputarray src, inputarray lowerb,

inputarray upperb, outputarray dst)

;@param src //輸入陣列。

@param lowerb //包括下邊界陣列或標量。

@param upperb //包含上邊界陣列或標量。

@param dst //輸出陣列,其大小與src相同,型別為cv_8u,單通道。

OpenCV HSV顏色空間轉換

dst cv2.cvtcolor arc,cv2.color bgr2hsv cv2.cvtcolor p1,p2 是顏色空間轉換函式,p1是需要轉換的,p2是轉換成何種格式,此處轉換為hsv格式 1 cv2.imread 介面讀影象,讀進來直接是bgr 格式資料格式在 0 255,需要特別注意的是...

色彩空間轉換

rgb轉換為yuv void rgb2yuv double r,double g,double b,double y,double u,double v yuv轉換為rgb void yuv2rgb double y,double u,double v,double r,double g,doubl...

色彩空間轉換

rgb轉換為yuv void rgb2yuv double r,double g,double b,double y,double u,double v yuv轉換為rgb void yuv2rgb double y,double u,double v,double r,double g,doubl...