利用OpenCV進行顏色檢測
轉(zhuǎn)自 | 齊魯工大云靈小鎮(zhèn)
利用OpenCV進行顏色分類
HSV介紹及應用
cv2.inRange及應用
RGB與HSV通道的區(qū)別
HSV介紹
HSV是相對RGB的另一種顏色表示方式,它相對RGB而言,是一種比較直觀的顏色模型。其中顏色的參數(shù)分別是:色調(diào)(H),飽和度(S),明度(V)。
色調(diào)H:
用角度度量,取值范圍0°~360°,從紅色開始按逆時針方向計算,紅色為0°,綠色為120°,藍色為240°。它們的補色是:黃色為60°,青色為180°,紫色為300°;
飽和度S:
飽和度S表示顏色接近光譜色的程度。一種顏色,可以看成是某種光譜色與白色混合的結(jié)合。其中光譜色所占的比例愈大,顏色接近光譜色的程度就愈高,顏色的飽和度也就愈高。飽和度高,顏色則深而艷。光譜色的白光成分為0,飽和度達到最高。通常取值范圍為0%~100%,值越大,顏色越飽和。
明度V:
明度表示顏色明亮的程度,對于光源色,明度值與發(fā)光體的光亮度有關;對于物體色,此值和物體的透射比或反射比有關,光照對此值影響最大。通常取值范圍為0%(黑)到100%(白)。
代碼:
OpenCV中由BGR轉(zhuǎn)為HSV方法:注意:OpenCV讀取的圖片格式為BGR格式,非RGB格式。
原圖:
處理后:
利用cv2.inRange進行二值化處理
cv2.inRange介紹
此函數(shù)可實現(xiàn)圖像的二值化處理功能,這點類似之前提到過的threshold()函數(shù),但是threshold()函數(shù)只能對單一通道進行二值化處理,而inRange()可以對多個通道進行操作。使用inRange處理之前,需要確定好兩個數(shù)組,即圖像上限和圖像下限。
img = cv2.inRange(hsv, lower, upper)
第一個參數(shù):hsv指的是原圖
第二個參數(shù):lower指的是圖像中低于這個lower的值,圖像值變?yōu)?
第三個參數(shù):upper指的是圖像中高于這個upper的值,圖像值變?yōu)?
注意:如果傳入的圖像是彩色的,即三維數(shù)組圖像,則lower與upper里面分別有三個元素,并且二者必須都是數(shù)組類型。
(lower, upper) 兩個數(shù)組參數(shù)可以作為一個范圍,如果圖像的像素點在這個范圍之內(nèi),像素點就變成255(即白色),如果圖像的像素點在這個范圍之外,像素點就變?yōu)?(即黑色)。
處理完成之后,圖像變?yōu)槎祱D像,想要的圖像顏色變?yōu)榘咨渌伾優(yōu)楹谏罂梢詫iT針對白色進行處理。
代碼示例
提取該圖水杯部分(即黑色部分):
處理后:
由于貓耳朵與后面角落有部分黑色,并且杯子本身黑色不純(存在白點),會產(chǎn)生噪點,需要后續(xù)進行處理,消去噪音點。
RGB通道與HSV通道在顏色檢測中的區(qū)別
如果光源不穩(wěn)定,光照變化較大(存在陰影或者亮斑),則利用HSV通道檢測就比RGB檢測高效得多。光照變化較大時,對RGB三個色道的參數(shù)影響都很大,在實際調(diào)參過程中會顯得非常麻煩,而且效果不理想。
HSV中,由于H是顏色的色調(diào),基本不受光照影響(即不受陰影或者亮斑影響),而V(明度)主要體現(xiàn)了顏色明亮程度,可以主要調(diào)試V來應對光源的變化,并且調(diào)試效果比RGB色道要可靠。
—版權(quán)聲明—
僅用于學術(shù)分享,版權(quán)屬于原作者。
若有侵權(quán),請聯(lián)系微信號:yiyang-sy 刪除或修改!
