日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python手势识别_Python|使用opencv进行简单的手势检测

發(fā)布時間:2023/12/15 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python手势识别_Python|使用opencv进行简单的手势检测 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡單的手勢識別,基本思路是基于皮膚檢測,皮膚的顏色在HSV顏色空間下與周圍環(huán)境的區(qū)分度更高,從RGB轉(zhuǎn)換到HSV顏色空間下針對皮膚顏色進(jìn)行二值化,得到mask:

defHSVBin(img):

hsv=cv2.cvtColor(img,cv2.COLOR_RGB2HSV)

lower_skin= np.array([100,50,0])

upper_skin= np.array([125,255,255])

mask=cv2.inRange(hsv,lower_skin,upper_skin)return mask

其中:

cvtColor用于顏色空間轉(zhuǎn)換。

inRange中,lower指圖像中低于這個值,圖像值會變成0;upper指圖像中高于這個值,圖像值會變成0,而在這之間的值變?yōu)?55。

然后通過腐蝕與膨脹等形態(tài)學(xué)變化去除一些噪點,得到更完整的白色(皮膚)色塊,最后找出色塊的輪廓,并通過色塊大小排除一些面積較小的噪點:

defgetContours(img):

kernel= np.ones((5,5),np.uint8)

closed=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)

closed=cv2.morphologyEx(closed,cv2.MORPH_CLOSE,kernel)

_,contours,h=cv2.findContours(closed,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

vaildContours=[]for cont incontours:if cv2.contourArea(cont)>9000:

vaildContours.append(cv2.convexHull(cont))return vaildContours

膨脹:dilate,進(jìn)行膨脹操作時,將內(nèi)核 B劃過圖像,將內(nèi)核B覆蓋區(qū)域的最大像素值提取,并代替錨點位置的像素,這一最大化操作會導(dǎo)致圖像中的亮區(qū)開始“擴(kuò)展”。

腐蝕:erode,將最小像素值提取原始圖片里的一個像素(1或者0)只有在核下的所有像素都是1的時候才被認(rèn)為是1.否則它就被腐蝕掉了(變成0)。根據(jù)核的大小來決定在邊界附近的多少像素會被丟棄掉,所以前景物體的厚度或大小會縮小,或者說白色區(qū)域會減小。這個在移除小的白色噪點時很有用。

ones(shape[,dtype,order]) 依據(jù)一個給定的形狀和類型返回一個新的元素全部為1的數(shù)組。

data type :uint8 -->range:0~255,一張圖片的數(shù)據(jù)類型默認(rèn)為unit8

開:腐蝕之后再膨脹的另一個名字。我們使用函數(shù)cv2.morphologyEx()。

閉:膨脹之后再腐蝕,在用來關(guān)閉前景對象里的小洞或小黑點很有用。

輪廓檢測 cv2.findContours,接收參數(shù)為二值圖。

defmain():

cap=cv2.VideoCapture(0)while(cap.isOpened()):

ret,img=cap.read()

skinMask=HSVBin(img)

contours=getContours(skinMask)

cv2.drawContours(img,contours,-1,(0,255,0),2)

cv2.imshow('capture',img)

k= cv2.waitKey(10)if k == 27:break

cv2.waitKey()--waitKey()函數(shù)的功能是不斷刷新圖像,頻率時間為delay,單位為ms。返回值為當(dāng)前鍵盤按鍵值。

完整代碼如下:

importcv2importnumpy as npdefmain():

cap=cv2.VideoCapture(0)while(cap.isOpened()):

ret,img=cap.read()

skinMask=HSVBin(img)

contours=getContours(skinMask)

cv2.drawContours(img,contours,-1,(0,255,0),2)

cv2.imshow('capture',img)

k= cv2.waitKey(10)if k == 27:break

defgetContours(img):

kernel= np.ones((5,5),np.uint8)

closed=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)

closed=cv2.morphologyEx(closed,cv2.MORPH_CLOSE,kernel)

_,contours,h=cv2.findContours(closed,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

vaildContours=[]for cont incontours:if cv2.contourArea(cont)>9000:#x,y,w,h = cv2.boundingRect(cont)

#if h/w >0.75:

#filter face failed

vaildContours.append(cv2.convexHull(cont))#rect = cv2.minAreaRect(cont)

#box = cv2.cv.BoxPoint(rect)

#vaildContours.append(np.int0(box))

returnvaildContoursdefHSVBin(img):

hsv=cv2.cvtColor(img,cv2.COLOR_RGB2HSV)

lower_skin= np.array([100,50,0])

upper_skin= np.array([125,255,255])

mask=cv2.inRange(hsv,lower_skin,upper_skin)#res = cv2.bitwise_and(img,img,mask=mask)

returnmaskif __name__ =='__main__':

main()

效果:

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的python手势识别_Python|使用opencv进行简单的手势检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。