2017-04-01 70 views
0

我想用OpenCV庫實現手語翻譯器。要做到這一點,我需要檢測手勢作爲第一階段。所以基本上我已經通過將RGB色彩空間轉換爲YCbCr來實現手的檢測,然後閾值範圍的膚色。在OpenCV中的手勢python

ycc = cv2.cvtColor(img , cv2.COLOR_BGR2YCR_CB) 

min_ycc = np.array([0,133,85], np.uint8) 
max_ycc = np.array([255,170,125], np.uint8) 
skin = cv2.inRange(ycc, min_ycc, max_ycc) 

opening = cv2.morphologyEx(skin, cv2.MORPH_OPEN, np.ones((5,5), np.uint8), iterations=3) 
sure_bg = cv2.dilate(opening,np.ones((3,3),np.uint8), iterations=2) 

_,contours,_ = cv2.findContours(sure_bg, cv2.RETR_LIST,cv2.CHAIN_APPROX_NONE) 

此代碼工作正常低詳細背景,但有一些噪音,如果我們有一個詳細的背景,其中包括近膚色。
我唯一關心的是如何確定哪個輪廓是手輪廓。我嘗試了最大輪廓,但沒有很準確。

Screenshot

回答

1

您可以通過腐蝕和膨脹(形態學操作)去除背景噪聲。然後可以設置輪廓區域的閾值(area = cv2.contourArea(cnt))並過濾掉手輪廓。 另一種方法是使用直方圖反投影。