欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實(shí)現(xiàn)手勢識別的示例(入門)

 更新時間:2020年04月15日 11:32:44   作者:露露核桃露  
這篇文章主要介紹了python實(shí)現(xiàn)手勢識別的示例(入門),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

使用open-cv實(shí)現(xiàn)簡單的手勢識別。剛剛接觸python不久,看到了很多有意思的項(xiàng)目,尤其時關(guān)于計(jì)算機(jī)視覺的。網(wǎng)上搜到了一些關(guān)于手勢處理的實(shí)驗(yàn),我在這兒簡單的實(shí)現(xiàn)一下(PS:和那些大佬比起來真的是差遠(yuǎn)了,畢竟剛接觸不久),主要運(yùn)用的知識就是opencv,python基本語法,圖像處理基礎(chǔ)知識。

最終實(shí)現(xiàn)結(jié)果:


獲取視頻(攝像頭

這部分沒啥說的,就是獲取攝像頭。

cap = cv2.VideoCapture("C:/Users/lenovo/Videos/1.mp4")#讀取文件
#cap = cv2.VideoCapture(0)#讀取攝像頭
while(True):
  ret, frame = cap.read()  key = cv2.waitKey(50) & 0xFF
  if key == ord('q'):
  	break
cap.release()
cv2.destroyAllWindows()

膚色檢測

這里使用的是橢圓膚色檢測模型
在RGB空間里人臉的膚色受亮度影響相當(dāng)大,所以膚色點(diǎn)很難從非膚色點(diǎn)中分離出來,也就是說在此空間經(jīng)過處理后,膚色點(diǎn)是離散的點(diǎn),中間嵌有很多非膚色,這為膚色區(qū)域標(biāo)定(人臉標(biāo)定、眼睛等)帶來了難題。如果把RGB轉(zhuǎn)為YCrCb空間的話,可以忽略Y(亮度)的影響,因?yàn)樵摽臻g受亮度影響很小,膚色會產(chǎn)生很好的類聚。這樣就把三維的空間將為二維的CrCb,膚色點(diǎn)會形成一定得形狀,如:人臉的話會看到一個人臉的區(qū)域,手臂的話會看到一條手臂的形態(tài)。

def A(img):

  YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) #轉(zhuǎn)換至YCrCb空間
  (y,cr,cb) = cv2.split(YCrCb) #拆分出Y,Cr,Cb值
  cr1 = cv2.GaussianBlur(cr, (5,5), 0)
  _, skin = cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) #Ostu處理
  res = cv2.bitwise_and(img,img, mask = skin)
  return res

輪廓處理

輪廓處理的話主要用到兩個函數(shù),cv2.findContours和cv2.drawContours,這兩個函數(shù)的使用使用方法很容易搜到就不說了,這部分主要的問題是提取到的輪廓有很多個,但是我們只需要手的輪廓,所以我們要用sorted函數(shù)找到最大的輪廓。

def B(img):

  #binaryimg = cv2.Canny(Laplacian, 50, 200) #二值化,canny檢測
  h = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) #尋找輪廓
  contour = h[0]
  contour = sorted(contour, key = cv2.contourArea, reverse=True)#已輪廓區(qū)域面積進(jìn)行排序
  #contourmax = contour[0][:, 0, :]#保留區(qū)域面積最大的輪廓點(diǎn)坐標(biāo)
  bg = np.ones(dst.shape, np.uint8) *255#創(chuàng)建白色幕布
  ret = cv2.drawContours(bg,contour[0],-1,(0,0,0),3) #繪制黑色輪廓
  return ret

全部代碼

""" 從視頻讀取幀保存為圖片"""
import cv2
import numpy as np
cap = cv2.VideoCapture("C:/Users/lenovo/Videos/1.mp4")#讀取文件
#cap = cv2.VideoCapture(0)#讀取攝像頭

#皮膚檢測
def A(img):

  YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) #轉(zhuǎn)換至YCrCb空間
  (y,cr,cb) = cv2.split(YCrCb) #拆分出Y,Cr,Cb值
  cr1 = cv2.GaussianBlur(cr, (5,5), 0)
  _, skin = cv2.threshold(cr1, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU) #Ostu處理
  res = cv2.bitwise_and(img,img, mask = skin)
  return res

def B(img):

  #binaryimg = cv2.Canny(Laplacian, 50, 200) #二值化,canny檢測
  h = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) #尋找輪廓
  contour = h[0]
  contour = sorted(contour, key = cv2.contourArea, reverse=True)#已輪廓區(qū)域面積進(jìn)行排序
  #contourmax = contour[0][:, 0, :]#保留區(qū)域面積最大的輪廓點(diǎn)坐標(biāo)
  bg = np.ones(dst.shape, np.uint8) *255#創(chuàng)建白色幕布
  ret = cv2.drawContours(bg,contour[0],-1,(0,0,0),3) #繪制黑色輪廓
  return ret


while(True):

  ret, frame = cap.read()
  #下面三行可以根據(jù)自己的電腦進(jìn)行調(diào)節(jié)
  src = cv2.resize(frame,(400,350), interpolation=cv2.INTER_CUBIC)#窗口大小
  cv2.rectangle(src, (90, 60), (300, 300 ), (0, 255, 0))#框出截取位置
  roi = src[60:300 , 90:300] # 獲取手勢框圖

  res = A(roi) # 進(jìn)行膚色檢測
  cv2.imshow("0",roi)

  gray = cv2.cvtColor(res, cv2.COLOR_BGR2GRAY)
  dst = cv2.Laplacian(gray, cv2.CV_16S, ksize = 3)
  Laplacian = cv2.convertScaleAbs(dst)

  contour = B(Laplacian)#輪廓處理
  cv2.imshow("2",contour)

  key = cv2.waitKey(50) & 0xFF
  if key == ord('q'):
      break
cap.release()
cv2.destroyAllWindows()

本人學(xué)了python幾天,做出這個東西自己已經(jīng)很滿足了,當(dāng)然和那些大佬也是沒法比的,沒有什么東西是速成的,只能一步一個腳印的走。

到此這篇關(guān)于python實(shí)現(xiàn)手勢識別的示例(入門)的文章就介紹到這了,更多相關(guān)python 手勢識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

  • django 獲取字段最大值,最新的記錄操作

    django 獲取字段最大值,最新的記錄操作

    這篇文章主要介紹了django 獲取字段最大值,最新的記錄操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 詳解Python 3.10 中的新功能和變化

    詳解Python 3.10 中的新功能和變化

    這篇文章主要介紹了詳解Python 3.10 中的新功能和變化,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • plt.subplot()參數(shù)及使用介紹

    plt.subplot()參數(shù)及使用介紹

    本文主要介紹了plt.subplot()參數(shù)及使用介紹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Pytorch 如何查看、釋放已關(guān)閉程序占用的GPU資源

    Pytorch 如何查看、釋放已關(guān)閉程序占用的GPU資源

    這篇文章主要介紹了Pytorch 查看、釋放已關(guān)閉程序占用的GPU資源的操作,具有很好的參考價值,希望對大家有所幫助。
    2021-05-05
  • Python 遍歷循環(huán)詳細(xì)

    Python 遍歷循環(huán)詳細(xì)

    這篇文章主要介紹的是Python 遍歷循環(huán),遍歷循環(huán)可理解為從遍歷結(jié)構(gòu)中逐一提取元素,放在循環(huán)變量中,對于所提取的每個元素執(zhí)行一次語句塊。由保留字for和in組成,完整遍歷所有元素后結(jié)束每次循環(huán),所獲得元素放入循環(huán)變量,并執(zhí)行一次語句塊,下面就來看文章介紹
    2021-10-10
  • 使用Python通過oBIX協(xié)議訪問Niagara數(shù)據(jù)的示例

    使用Python通過oBIX協(xié)議訪問Niagara數(shù)據(jù)的示例

    這篇文章主要介紹了使用Python通過oBIX協(xié)議訪問Niagara數(shù)據(jù)的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-12-12
  • Python中numpy的np.percentile百分位函數(shù)舉例詳解

    Python中numpy的np.percentile百分位函數(shù)舉例詳解

    在python中計(jì)算一個多維數(shù)組的任意百分比分位數(shù),此處的百分位是從小到大排列,只需用np.percentile即可,這篇文章主要給大家介紹了關(guān)于Python中numpy的np.percentile百分位函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • 使用Python的Flask框架實(shí)現(xiàn)視頻的流媒體傳輸

    使用Python的Flask框架實(shí)現(xiàn)視頻的流媒體傳輸

    這篇文章主要介紹了使用Python的Flask框架實(shí)現(xiàn)視頻的流媒體傳輸,包括從攝像機(jī)獲取幀到web瀏覽器的數(shù)字流傳輸,需要的朋友可以參考下
    2015-03-03
  • 最新評論