返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何利用opencv实现手势识别
  • 973
分享到

Python如何利用opencv实现手势识别

2024-04-02 19:04:59 973人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录获取视频(摄像头)肤色检测轮廓处理前言: 网上搜到了一些关于手势处理的实验,我在这儿简单的实现一下,主要运用的知识就是OpenCV,python基本语法,图像处理基础知识。 获取

前言:

网上搜到了一些关于手势处理的实验,我在这儿简单的实现一下,主要运用的知识就是OpenCVpython基本语法,图像处理基础知识。

获取视频(摄像头)

这部分没啥说的,就是获取摄像头。

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空间里人脸的肤色受亮度影响相当大,所以肤色点很难从非肤色点中分离出来,也就是说在此空间经过处理后,肤色点是离散的点,中间嵌有很多非肤色,这为肤色区域标定(人脸标定、眼睛等)带来了难题。如果把RGB转为YCrCb空间的话,可以忽略Y(亮度)的影响,因为该空间受亮度影响很小,肤色会产生很好的类聚。这样就把三维的空间将为二维的CrCb,肤色点会形成一定得形状,如:人脸的话会看到一个人脸的区域,手臂的话会看到一条手臂的形态。

def A(img):
    YCrCb = cv2.cvtColor(img, cv2.COLOR_BGR2YCR_CB) #转换至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

轮廓处理

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

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)#已轮廓区域面积进行排序
    #contourmax = contour[0][:, 0, :]#保留区域面积最大的轮廓点坐标
    bg = np.ones(dst.shape, np.uint8) *255#创建白色幕布
    ret = cv2.dra
wContours(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) #转换至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)#已轮廓区域面积进行排序
    #contourmax = contour[0][:, 0, :]#保留区域面积最大的轮廓点坐标
    bg = np.ones(dst.shape, np.uint8) *255#创建白色幕布
    ret = cv2.drawContours(bg,contour[0],-1,(0,0,0),3) #绘制黑色轮廓
    return ret
while(True):
    ret, frame = cap.read()
    #下面三行可以根据自己的电脑进行调节
    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)  # 进行肤色检测
    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()

到此这篇关于Python如何利用opencv实现手势识别的文章就介绍到这了,更多相关 Python手势识别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python如何利用opencv实现手势识别

本文链接: https://lsjlt.com/news/118413.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python如何利用opencv实现手势识别
    目录获取视频(摄像头)肤色检测轮廓处理前言: 网上搜到了一些关于手势处理的实验,我在这儿简单的实现一下,主要运用的知识就是opencv,python基本语法,图像处理基础知识。 获取...
    99+
    2024-04-02
  • Python怎么利用opencv实现手势识别
    这篇文章主要讲解了“Python怎么利用opencv实现手势识别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么利用opencv实现手势识别”吧!获取视频(摄像头)这部分没啥说...
    99+
    2023-06-30
  • 利用OpenCV+Tensorflow实现的手势识别
    目录一、效果展示二、项目实现原理三、项目环境安装四、代码实现五、总结一、效果展示 此次只选录了以下五种手势,当然你可以自己选择增加手势。 二、项目实现原理 首先通过openc...
    99+
    2022-11-16
    opencv tensorflow手势识别 tensorflow手势识别 opencv手势识别代码
  • OpenCV如何利用手势识别实现虚拟拖放效果
    这篇文章主要介绍OpenCV如何利用手势识别实现虚拟拖放效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!第一步通过opencv设置显示框和调用摄像头显示当前画面import cv2cap =&n...
    99+
    2023-06-26
  • OpenCV利用手势识别实现虚拟拖放效果
    目录第一步第二步第三步完整代码本文将实现一些通过手拖放一些框,我们可以使用这个技术实现一些游戏,控制机械臂等很多有趣的事情。 第一步 通过opencv设置显示框和调用摄像头显示当前画...
    99+
    2024-04-02
  • C++中怎么用OpenCV实现手势识别
    本篇内容介绍了“C++中怎么用OpenCV实现手势识别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、手部关键点检测如图所示,为我们的手部...
    99+
    2023-06-29
  • Python如何使用opencv进行手势识别详解
    目录前言原理程序部分附另一个手势识别实例总结前言 本项目是使用了谷歌开源的框架mediapipe,里面有非常多的模型提供给我们使用,例如面部检测,身体检测,手部检测等。 原理 首先...
    99+
    2024-04-02
  • C++OpenCV实战之手势识别
    目录前言一、手部关键点检测1.1 功能源码1.2 功能效果二、手势识别2.1算法原理2.2功能源码三、结果显示3.1功能源码3.2效果显示四、源码总结前言 本文将使用OpenCV C...
    99+
    2024-04-02
  • Python利用手势识别实现贪吃蛇游戏
    目录一、前言二、项目介绍1、游戏的操作方式2、开发的过程中的注意事项三、游戏的实现要点1、选择第三方库2、找到关键点并标记3、创建一个类来保存关于游戏的所有功能4、定义函数进行不断更...
    99+
    2024-04-02
  • Python怎么使用opencv进行手势识别
    这篇文章将为大家详细讲解有关Python怎么使用opencv进行手势识别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。原理首先先进行手部的检测,找到之后会做Hand Landmarks。将手掌的21个点找...
    99+
    2023-06-26
  • C++基于OpenCV实现手势识别的源码
    先给大家上效果图: 源码在下面 使用 RGB 值分割手部区域,即手部的 GB 值将与背景不同 或者使用边缘检测 或者 背景减法。  我这里使用了背景减法模型。OpenC...
    99+
    2024-04-02
  • Python-OpenCV中如何利用 KNN 算法识别手写数字
    手写数字数据集 MNIST 介绍为了保证完整性,从算法所用的训练数据讲起,训练数据是由 MNIST 手写数字组成的,MNIST 数据集来自美国国家标准与技术研究所,由来自 250 个不同人手写的数字构成,其中训练集包含 60000 张图片,...
    99+
    2023-06-22
  • python+mediapipe+opencv实现手部关键点检测功能(手势识别)
    目录一、mediapipe是什么?二、使用步骤1.引入库2.主代码3.识别结果补充:一、mediapipe是什么? mediapipe官网 二、使用步骤 1.引入库 代码如下: im...
    99+
    2024-04-02
  • Python怎么利用手势识别实现贪吃蛇游戏
    这篇文章主要介绍“Python怎么利用手势识别实现贪吃蛇游戏”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么利用手势识别实现贪吃蛇游戏”文章能帮助大家解决问题。项目介绍1、游戏的操作方...
    99+
    2023-06-30
  • Python-OpenCV实战:利用KNN算法识别手写数字
    目录前言手写数字数据集 MNIST 介绍基准模型——利用 KNN 算法识别手写数字改进模型1——参数 K 对识别手写数字精确度的影响改进模型2——训练数据量对识别手写数字精确度的影响...
    99+
    2024-04-02
  • 札记:android手势识别功能实现(利用MotionEvent)
    摘要 本文是手势识别输入事件处理的完整学习记录。内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类、多点触摸。根据案...
    99+
    2022-06-06
    Android
  • 如何使用Python识别手势数字
    这篇文章主要介绍如何使用Python识别手势数字,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言谷歌出了一个开源的、跨平台的、可定制化的机器学习解决方案工具包,给在线流媒体(当然也可以用于普通的视频、图像等)提供了...
    99+
    2023-06-15
  • 如何利用Python实现面部识别
    本篇内容介绍了“如何利用Python实现面部识别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!对于开发环境,我们将使用 Visual Stu...
    99+
    2023-06-30
  • Python+OpenCV手势检测与识别Mediapipe基础篇
    目录前言项目效果图认识Mediapipe项目环境代码核心代码视频帧率计算完整代码项目输出结语前言 本篇文章适合刚入门OpenCV的同学们。文章将介绍如何使用Python利用OpenC...
    99+
    2022-12-10
    python opencv手势识别 opencv手势识别代码 mediapipe手势识别
  • Python OpenCV卡号识别如何识别
    本篇内容主要讲解“Python OpenCV卡号识别如何识别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python OpenCV卡号识别如何识别”吧!学在前面从本篇博客起,我们将实际完成几个...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作