關于利用OpenCV進行顏色分類,本文包含了HSV介紹及應用、cv2.inRange及應用、RGB與HSV通道的區別三個方面。
01 HSV介紹
HSV是相對RGB的另一種顏色表示方式,它相對RGB而言,是一種比較直觀的顏色模型。其中顏色的參數分別是:色調(H),飽和度(S),明度(V)。
色調H:
用角度度量,取值范圍0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°。它們的補色是:黃色為60°,青色為180°,紫色為300°;
飽和度S:
飽和度S表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結合。其中光譜色所占的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高。飽和度高,顏色則深而艷。光譜色的白光成分為0,飽和度達到最高。通常取值范圍為0%~100%,值越大,顏色越飽和。
明度V:
明度表示顏色明亮的程度,對于光源色,明度值與發光體的光亮度有關;對于物體色,此值和物體的透射比或反射比有關,光照對此值影響最大。通常取值范圍為0%(黑)到100%(白)。
代碼:
OpenCV中由BGR轉為HSV方法:注意:OpenCV讀取的圖片格式為BGR格式,非RGB格式。
原圖:
處理后:
02 利用cv2.inRange進行二值化處理
cv2.inRange介紹
此函數可實現圖像的二值化處理功能,這點類似之前提到過的threshold()函數,但是threshold()函數只能對單一通道進行二值化處理,而inRange()可以對多個通道進行操作。使用inRange處理之前,需要確定好兩個數組,即圖像上限和圖像下限。
img=cv2.inRange(hsv,lower,upper)
第一個參數:hsv指的是原圖
第二個參數:lower指的是圖像中低于這個lower的值,圖像值變為0
第三個參數:upper指的是圖像中高于這個upper的值,圖像值變為0
注意:如果傳入的圖像是彩色的,即三維數組圖像,則lower與upper里面分別有三個元素,并且二者必須都是數組類型。
(lower, upper)兩個數組參數可以作為一個范圍,如果圖像的像素點在這個范圍之內,像素點就變成255(即白色),如果圖像的像素點在這個范圍之外,像素點就變為0(即黑色)。
處理完成之后,圖像變為二值圖像,想要的圖像顏色變為白色,其他顏色變為黑色,之后可以專門針對白色進行處理。
代碼示例
提取該圖水杯部分(即黑色部分):
處理后:
由于貓耳朵與后面角落有部分黑色,并且杯子本身黑色不純(存在白點),會產生噪點,需要后續進行處理,消去噪音點。
03 RGB通道與HSV通道在顏色檢測中的區別
如果光源不穩定,光照變化較大(存在陰影或者亮斑),則利用HSV通道檢測就比RGB檢測高效得多。光照變化較大時,對RGB三個色道的參數影響都很大,在實際調參過程中會顯得非常麻煩,而且效果不理想。
HSV中,由于H是顏色的色調,基本不受光照影響(即不受陰影或者亮斑影響),而V(明度)主要體現了顏色明亮程度,可以主要調試V來應對光源的變化,并且調試效果比RGB色道要可靠。
審核編輯:湯梓紅
-
RGB
+關注
關注
4文章
801瀏覽量
58716 -
OpenCV
+關注
關注
31文章
635瀏覽量
41556 -
顏色檢測
+關注
關注
0文章
9瀏覽量
865 -
HSV
+關注
關注
0文章
10瀏覽量
2615
原文標題:基礎丨利用OpenCV進行顏色檢測
文章出處:【微信號:gh_c87a2bc99401,微信公眾號:INDEMIND】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論