0
雷鋒網(wǎng)按:本文為 AI 研習社編譯的技術(shù)博客,原標題 Finger Detection and Tracking using OpenCV and Python,作者為Jason Brownlee。
翻譯 | 余杭 Lamaric 校對 | 吳曉曼 審核 | 余杭
詳細代碼參考:https://github.com/amarlearning/opencv
手指追蹤是許多計算機視覺應(yīng)用的重要特征。在該應(yīng)用中,使用基于直方圖的方法將手與背景幀分離。 使用閾值處理和濾波技術(shù)來進行背景消除以獲得最佳結(jié)果。
我在手指識別時遇到的挑戰(zhàn)之一是將手與背景區(qū)分開并識別手指的尖端。我將向您展示我用于手指跟蹤的技術(shù),我在此項目中使用了該技術(shù)。如果想要查看手指識別和跟蹤的實際操作,請觀看我上傳的視頻。
在要跟蹤用戶手部移動的應(yīng)用程序中,膚色在要跟蹤用戶手部移動的應(yīng)用程序中,膚色直方圖將非常有用。使用直方圖從圖像中剔除背景,僅留下包含膚色的圖像部分。
檢測皮膚的一種更簡單的方法是找到特定 RGB 或 HSV 范圍內(nèi)的像素。如果您想了解更多有關(guān)此方法的信息,請點擊此處(https://docs.opencv.org/3.4.2/df/d9d/tutorial_py_colorspaces.html)。
上述方法的問題在于改變光線條件和膚色可能會使皮膚檢測的結(jié)果很糟糕。另一方面,直方圖往往更準確,并且直方圖能夠考慮到當前的光照條件。
在框架中繪制一個綠色的長方形并且用戶將他們的手放置在長方形中。應(yīng)用程序提取用戶手掌的膚色,然后繪制成一個直方圖。
繪制長方形的過程遵循以下函數(shù):
這個過程非常簡單——我創(chuàng)建了四行代碼來表示每個長方形的坐標。
hand_rect_one_x
hand_rect_one_y
hand_rect_two_x
hand_rect_two_y
這四行代碼不斷迭代以在框架內(nèi)使用:cv2.rectangle 繪制生成長方形;這里的total_rectangle表示行列的長度9。
現(xiàn)在用戶理解了在哪里放置他們的手掌,接下來成功的關(guān)鍵步驟是從這些長方形中提取像素,然后基于像素生成 HSV 直方圖
函數(shù)把輸入框架轉(zhuǎn)換成 HSV 直方圖。使用 Numpy 庫生成一張圖像。圖像大小為[90*10],顏色通道數(shù)為 3。我們將其命名為 ROI (Region of Interest). 它從綠色的長方形中提取了 900 個像素值,然后將它們放入 ROI 矩陣中。cv2.calcHist 基于 ROI 矩陣給膚色創(chuàng)建了一個直方圖并且 cv2.normalize 使用 norm 類型對矩陣進行歸一化 cv2.NORM_MINMAX 。現(xiàn)在我們可以用直方圖來檢測框架中的皮膚區(qū)域。
現(xiàn)在用戶理解了將他們的手掌放在哪里,下一步就是從這些長方形中提取像素然后用它們生成HSV直方圖。
現(xiàn)在基于膚色直方圖我們可以找到包含皮膚的框架區(qū)域,OpenCV 提供了一個簡便的方法,cv2.calvBackProject,該方法使用直方圖來分離圖像中的特征。我通過這個函數(shù)來把膚色直方圖應(yīng)用到框架中。如果你想獲取更多關(guān)于 back project 的信息,可以通過鏈接1(https://docs.opencv.org/master/dc/df6/tutorial_py_histogram_backprojection.html)和鏈接2(https://docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/back_projection/back_projection.html)來獲取。
......
想要繼續(xù)閱讀,請移步至我們的AI研習社社區(qū):https://club.leiphone.com/page/TextTranslation/775
更多精彩內(nèi)容盡在 AI 研習社。
不同領(lǐng)域包括計算機視覺,語音語義,區(qū)塊鏈,自動駕駛,數(shù)據(jù)挖掘,智能控制,編程語言等每日更新。
雷鋒網(wǎng)雷鋒網(wǎng)(公眾號:雷鋒網(wǎng))
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。