opencv手势识别,python opencv 人脸识别

  opencv手势识别,python opencv 人脸识别

  本文主要介绍Python如何利用opencv实现手势识别。文章围绕主题进行了详细介绍,具有一定的参考价值。有需要的男生可以参考一下。

  00-1010获取视频(摄像机)肤色检测轮廓处理前言:

  我在网上找了一些关于手势处理的实验。我将在这里简单地实现它们。我用的主要知识是opencv,python基础语法,图像处理基础知识。

  

目录

 

  这部分没什么好说的,就是拿到相机。

  cap=cv2 . video capture( c :/users/Lenovo/videos/1 . MP4 )#读取文件

  #cap=cv2。VideoCapture(0)#读取摄像机

  while(True):

  ret,frame=cap . read()key=cv2 . wait key(50)0x ff

  if key==ord(q):

  破裂

  cap.release()

  cv2.destroyAllWindows()

  

获取视频(摄像头)

 

  这里使用椭圆肤色检测模型。

  在RGB空间中,人脸肤色受亮度影响较大,很难将肤色点与非肤色点分开。也就是说,在这个空间处理后,肤色点是中间嵌入了很多非肤色的离散点,给肤色区域标定(人脸标定、眼睛等)带来了困难。).如果把RGB转换到YCrCb空间,Y(亮度)的影响可以忽略,因为这个空间受亮度影响很小,肤色会产生很好的聚类。这样三维空间会是一个二维的CrCb,肤色点会形成一定的形状,比如在脸的情况下会看到一个脸的区域,在手臂的情况下会看到一个手臂的形状。

  def A(img):

  YCCB=CV2.cvtcolor (IMG,CV2.color _ BGR2YCR _ CB) #转换到YCrCb空间

  (y,cr,cb)=cv2.split(YCrCb) #以拆分出y,Cr和cb的值。

  cr1=cv2。高斯布鲁(cr,(5,5),0)

  _,skin=cv2.threshold (cr1,0,255,cv2 . thresh _ binary cv 2 . thresh _ Otsu)# ostu处理

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

  返回资源

  

肤色检测

 

  轮廓处理中用到的函数主要有两个,cv2.findContours和cv2.drawContours这两个函数的用法很容易找到,就不说了。这部分的主要问题是提取的轮廓很多,但是我们只需要手的轮廓,所以要用排序函数来寻找最大的轮廓。

  定义B(img):

  # binaryimg=cv2.canny(拉普拉斯,50,200) #二值化,canny检测

  H=cv2.findcontours (img,cv2.retr _ external,cv2.chain _ approximate _ none) #查找轮廓

  轮廓=h[0]

  Contour=sorted (contour,key=cv2.contour area,reverse=true) #按轮廓区域的面积排序

  # contour max=contour [0] [:0,] #保留面积最大的等高线点的坐标。

  BG=np.ones (dst.shape,np.uint8) * 255 #打造白色幕布

  ret=cv2.dra

  W contours (BG,contours [0],-1,(0,0,0),3) #绘制黑色轮廓

  返回ret

  全部代码:

  从视频中读取帧并将它们保存为图片

  导入cv2

  将numpy作为np导入

  cap=cv2 . video capture( c :/users/Lenovo/videos/1 . MP4 )#读取文件

  #cap=cv2。VideoCapture(0)#读取摄像机

  #皮肤测试

  def A(img):

  YCCB=CV2.cvtcolor (IMG,CV2.color _ BGR2YCR _ CB) #转换到YCrCb空间

  (y,cr,cb)=cv2.split(YCrCb) #以拆分出y,Cr和cb的值。

  cr1=cv2。高斯布鲁(cr,(5,5),0)

  _,skin=cv2.threshold (cr1,0,255,cv2 . thresh _ binary cv 2 . thresh _ Otsu)# ostu处理

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

  返回资源

  定义B(img):

  # binaryimg=cv2.canny(拉普拉斯,50,200) #二值化,canny检测

  H=cv2.findcontours (img,cv2.retr _ external,cv2.chain _ approximate _ none) #查找轮廓

  轮廓=h[0]

  Contour=sorted (contour,key=cv2.contour area,reverse=true) #按轮廓区域的面积排序

  # contour max=contour [0] [:0,] #保留面积最大的等高线点的坐标。

  BG=np.ones (dst.shape,np.uint8) * 255 #打造白色幕布

  Ret=cv2.drawcontours (bg,contours [0],-1,(0,0,0),3) #绘制黑色轮廓

  返回ret

  while(True):

  ret,frame=cap.read()

  #以下三行可以根据自己的电脑进行调整

  Src=cv2.resize (frame,(400,350),interpolation=cv2 . inter _ cubic)#窗口大小

  2.CVrectangle (src,(90,60),(300,300),(0,255,0)) #框出拦截位置。

  Roi=src [603360300,90:300] #获取手势框图

  Res=A(roi) #用于肤色检测

  cv2.imshow(0 ,roi)

  gray=cv2.cvtColor(res,cv2。COLOR_BGR2GRAY)

  dst=cv2。拉普拉斯(灰色,cv2。CV_16S,ksize=3)

  拉普拉斯=cv2.convertScaleAbs(dst)

  轮廓=B(拉普拉斯)#轮廓处理

  cv2.imshow(2 ,轮廓)

  key=cv2.waitKey(50)0xFF

  if key==ord(q):

  破裂

  cap.release()

  cv2.destroyAllWindows()

  关于Python如何使用opencv实现手势识别的这篇文章就到这里了。关于Python手势识别的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: