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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

python

python opencv手势识别_OpenCV+Python3.5 简易手势识别的实现

發(fā)布時(shí)間:2024/1/8 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python opencv手势识别_OpenCV+Python3.5 简易手势识别的实现 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

檢測(cè)剪刀石頭布三種手勢(shì),通過(guò)攝像頭輸入,方法如下:

選用合適顏色空間及閾值提取皮膚部分

使用濾波腐蝕膨脹等方法去噪

邊緣檢測(cè)

尋用合適方法分類(lèi)

OpenCV用攝像頭捕獲視頻

采用方法:調(diào)用OpenCV——cv2.VideoCapture()

def video_capture():

cap = cv2.VideoCapture(0)

while True:

# capture frame-by-frame

ret, frame = cap.read()

# our operation on the frame come here

# gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 可選擇灰度化

# display the resulting frame

cv2.imshow('frame', frame)

if cv2.waitKey(1) & 0xFF == ord('q'): # 按q鍵退出

break

# when everything done , release the capture

cap.release()

cv2.destroyAllWindows()

效果如下

膚色識(shí)別——橢圓膚色檢測(cè)模型

參考下述博文

https://www.jb51.net/article/202594.htm

代碼如下

def ellipse_detect(img):

# 橢圓膚色檢測(cè)模型

skinCrCbHist = np.zeros((256, 256), dtype=np.uint8)

cv2.ellipse(skinCrCbHist, (113, 155), (23, 15), 43, 0, 360, (255, 255, 255), -1)

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

(y, cr, cb) = cv2.split(YCRCB)

skin = np.zeros(cr.shape, dtype=np.uint8)

(x, y) = cr.shape

for i in range(0, x):

for j in range(0, y):

CR = YCRCB[i, j, 1]

CB = YCRCB[i, j, 2]

if skinCrCbHist[CR, CB] > 0:

skin[i, j] = 255

dst = cv2.bitwise_and(img, img, mask=skin)

return dst

效果如下,可見(jiàn)與膚色相近的物體全被提取出來(lái),包括桌子。。。

識(shí)別時(shí)需尋找一無(wú)干擾環(huán)境

去噪——濾波、腐蝕和膨脹

參考下述博文

https://www.jb51.net/article/202599.htm

采用方法:高斯濾波 cv2.GaussianBlur() + 膨脹 cv2.dilate(),代碼如下

# 膨脹

def dilate_demo(image):

# 灰度化

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化

ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

# 定義結(jié)構(gòu)元素的形狀和大小

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))

# 膨脹操作

dst = cv2.dilate(binary, kernel)

return dst

# 腐蝕

def erode_demo(image):

# 灰度化

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 二值化

ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

# 定義結(jié)構(gòu)元素的形狀和大小

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 15))

# 腐蝕操作

dst = cv2.erode(binary, kernel)

return dst

# 濾波

def img_blur(image):

# 腐蝕操作

# img_erode = erode_demo(image)

# 膨脹操作

img_dilate = dilate_demo(image)

# 均值濾波

# blur = cv2.blur(image, (5, 5))

# 高斯濾波

blur = cv2.GaussianBlur(img_dilate, (3, 3), 0)

return blur

Canny邊緣檢測(cè)

參考OpenCV中文教程

https://www.kancloud.cn/aollo/aolloopencv/271603

代碼如下

# Canny邊緣檢測(cè)v

def canny_detect(image):

edges = cv2.Canny(image, 50, 200)

return edges

識(shí)別——輪廓匹配

Tensorflow框架實(shí)在太難搭,搭了半天沒(méi)搭出來(lái),還一堆錯(cuò)誤。。。所以采用輪廓匹配 cv2.matchShapes() ,方案如下:

劃分出了一個(gè)手勢(shì)識(shí)別區(qū)域,可避免周?chē)h(huán)境的干擾,也可簡(jiǎn)化圖像處理過(guò)程

尋找輪廓時(shí)采用尋找矩形框架 cv2.boundingRect()的方法找到最大輪廓,即手勢(shì)的輪廓

將找到的輪廓直接與標(biāo)準(zhǔn)圖片進(jìn)行匹配,簡(jiǎn)化識(shí)別過(guò)程

但在匹配時(shí)發(fā)現(xiàn)“剪刀”的手勢(shì)常與“石頭”、“布”的手勢(shì)匹配到一起。。。所以另辟蹊徑,在匹配時(shí)加上了對(duì)于矩形框架面積的判斷,一般來(lái)說(shuō)有如下規(guī)律,石頭

# 輪廓匹配

value = [0, 0, 0]

value[0] = cv2.matchShapes(img_contour, img1, 1, 0.0)

value[1] = cv2.matchShapes(img_contour, img2, 1, 0.0)

value[2] = cv2.matchShapes(img_contour, img3, 1, 0.0)

min_index = np.argmin(value)

if min_index == 0: # 剪刀

print(text[int(min_index)], value)

elif min_index == 1 and w*h < 25000: # 石頭

print(text[int(min_index)], value)

elif min_index == 1 and w*h >= 25000: # 剪刀

print(text[0], value)

elif min_index == 2 and w * h > 30000: # 布

print(text[int(min_index)], value)

elif min_index == 2 and w * h <= 30000: # 剪刀

print(text[0], value)

程序會(huì)根據(jù)匹配值和面積大小來(lái)決定識(shí)別結(jié)果,例如,下述結(jié)果,1.179515828609219, 0.9604643714904955, 0.9896353720020925分別對(duì)應(yīng)剪刀、石頭、布的匹配值,越小說(shuō)明越吻合;結(jié)合最終識(shí)別情況來(lái)看,在三種手勢(shì)中,石頭的識(shí)別成功率最高,約98%;布其次,約88%;剪刀最低,約80%,而且結(jié)果易受環(huán)境亮度影響,環(huán)境過(guò)暗或過(guò)亮,有時(shí)候手勢(shì)輪廓都出不來(lái)。。。看來(lái)仍有待改進(jìn),還是得用機(jī)器學(xué)習(xí)的方法

石頭 [1.179515828609219, 0.9604643714904955, 0.9896353720020925]

程序效果如下,黃色矩形框?yàn)樽R(shí)別區(qū)域,gesture窗口為用于輪廓匹配的手勢(shì)圖

到此這篇關(guān)于OpenCV+Python3.5 簡(jiǎn)易手勢(shì)識(shí)別的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)OpenCV 手勢(shì)識(shí)別 內(nèi)容請(qǐng)搜索我們以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持我們!

本文標(biāo)題: OpenCV+Python3.5 簡(jiǎn)易手勢(shì)識(shí)別的實(shí)現(xiàn)

本文地址: http://www.cppcns.com/jiaoben/python/370582.html

總結(jié)

以上是生活随笔為你收集整理的python opencv手势识别_OpenCV+Python3.5 简易手势识别的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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