標記膚色

HSV色彩空間

RGB空間是從硬件的角度提出的顏色模型,在與人眼匹配的過程中可能存在一定的差異,HSV色彩空間是一種面向視覺感知的顏色模型。包含三要素:

  1. 色調(Hue):也被稱爲色相,主要與光譜中的波長相關,色調取值爲[0,360],一般0代表紅色,120代表綠色,300代表品紅色,不同的取值代表不同的顏色。
  2. 飽和度(Saturation):值相對純淨度,純譜色是全包飽和的,像深紅色(紅加白)和淡紫色(紫加白)是欠飽和的,飽和度與所加白光數量成反比。
  3. 亮度(Value):反映的是人眼感受到的光的明暗程度。對於色彩來講,如果其中參雜的白色越多,則亮度越高;如果其中參雜的黑色越多,則亮度越低。
    其對應的OpenCv代碼爲:
dst = cv2.cvtColor(src, cv2.COLOR_RGB2HSV)

其中:
dst爲輸出圖像
src爲輸入圖像
cv2.COLOR_RGB2HSV爲轉換函數

標記指定顏色

通過inTange函數鎖定特值

dst = cv2.inRange(src, lowerb, upperb)

其中:
dst表示輸出結果,大小和src一致
src表示要檢查的數組或圖像
lowerb表示範圍下界
upperb表示範圍上界

通過基於掩碼的按位與顯示ROI

通過mask設置感興趣區域(掩模)

roi = cv2.bitwise_and(img, img, mask=mask)

標記膚色

這裏將膚色的範圍劃定爲:

  • 色調值在[50,120]之間
  • 飽和度值在[40,100]之間
import cv2

img = cv2.imread('YYGL.JPG',cv2.IMREAD_REDUCED_COLOR_4)
hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
h,s,v = cv2.split(hsv)
minHue = 50;
maxHue = 120;
HueMask = cv2.inRange(h,minHue,maxHue)
minSat = 80;
maxSat = 140;
SatMask = cv2.inRange(s,minSat,maxSat)
mask = HueMask & SatMask
roi = cv2.bitwise_and(img, img, mask=mask)
cv2.imshow('img',img)
cv2.imshow('ROI',roi)
cv2.waitKey()
cv2.destroyAllWindows()

運行結果:
原圖:
在這裏插入圖片描述
輸出結果圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章