rgb通道與hsv通道在顏色檢測中的區別
hsv是相對rgb的另一種顏色表示方式,它相對rgb而言,是一種比較直觀的顏色模型。其中顏色的引數分別是:色調(h),飽和度(s),明度(v)。
色調h:
用角度度量,取值範圍為0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°。它們的補色是:黃色為60°,青色為180°,紫色為300°;
飽和度s:
飽和度s表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結果。其中光譜色所佔的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高。飽和度高,顏色則深而豔。光譜色的白光成分為0,飽和度達到最高。通常取值範圍為0%~100%,值越大,顏色越飽和。
明度v:
明度表示顏色明亮的程度,對於光源色,明度值與發光體的光亮度有關;對於物體色,此值和物體的透射比或反射比有關,光照對此值影響最大。通常取值範圍為0%(黑)到100%(白)。
)#讀取一張
hsv=cv2.cvtcolor(img,cv2.color_bgr2hsv)
#利用cv2.cvtcolor將進行格式轉化
#轉化型別為cv2.color_bgr2hsv
cv2.imshow(
"hsv"
, hsv)
cv2.waitkey(
0)
cv2.destroyallwindows(
)原圖:
處理後:
此函式可實現影象的二值化處理功能,這點類似之前提到過的threshold()函式,但是threshold()函式只能對單一通道進行二值化處理,而inrange()可以對多個通道進行操作。使用inrange處理之前,需要確定好兩個陣列,即影象上限和影象下限。
img = cv2.inrange(hsv, lower, upper)
第乙個引數:hsv指的是原圖
第二個引數:lower指的是影象中低於這個lower的值,影象值變為0
第三個引數:upper指的是影象中高於這個upper的值,影象值變為0
注意:如果傳入的影象是彩色的,即三維數**像,則lower與upper裡面分別有三個元素,並且二者必須都是陣列型別。
(lower, upper)兩個陣列引數可以作為乙個範圍,如果影象的畫素點在這個範圍之內,畫素點就變成255(即白色),如果影象的畫素點在這個範圍之外,畫素點就變為0(即黑色)。
處理完成之後,影象變為二值影象,想要的影象顏色變為白色,其他顏色變為黑色,之後可以專門針對白色進行處理。
提取該圖水杯部分(即黑色部分):
])#提前確定黑色的hsv範圍
img_r=cv2.inrange(img,lower,upper)
cv2.imshow(
"img_r"
,img_r)
cv2.waitkey(0)
cv2.destroyallwindows(
)處理後:
由於貓耳朵與後面角落有部分黑色,並且杯子本身黑色不純(存在白點),會產生噪點,需要後續進行處理,消去噪音點。
如果光源不穩定,光照變化較大(存在陰影或者亮斑),則利用hsv通道檢測就比rgb檢測高效得多。光照變化較大時,對rgb三個色道的引數影響都很大,在實際調參過程中會顯得非常麻煩,而且效果不理想。
hsv中,由於h是顏色的色調,基本不受光照影響(即不受陰影或者亮斑影響),而v(明度)主要體現了顏色明亮程度,可以主要除錯v來應對光源的變化,並且除錯效果比rgb色道要可靠。
文:齊魯工業大學 雲靈未來人工智慧協會 aidc017
利用opencv檢測出矩形
pragma once include troot.h include cbintoprofile.h include th1.h include cbmpdiff.h include ccircletopeak.h include ccolorcut.h include ccubicbspline...
利用opencv進行換臉
關於換臉的什麼背景什麼的,我也就不提了,直接說一下換臉所需要的步驟吧,在這裡我用的是opencv和之前我用的clm框架,clm還是進行人臉關鍵點檢測,利用opencv進行臉部替換和顏色風格統一。接下來是利用opencv換臉的一般步驟 臉部關鍵點檢測 因為我們要變換的兩張臉的形狀一般是不同的,所以我們...
利用dlib進行人臉檢測
1 dlib安裝,pip install dlib。參考 同opencv人臉檢測,參考 構建人臉檢測器 detector dlib.get frontal face detector 獲取人臉關鍵點檢測器 predictor dlib.shape predictor shape predictor ...