Python使用Opencv图像处理方法完成手势识别(一)

这篇具有很好参考价值的文章主要介绍了Python使用Opencv图像处理方法完成手势识别(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


由于是使用Opencv完成手势识别,所以首先利用颜色特征是对手的颜色进行提取,获得HSV的最小值与最大值。

HSV的提取

HSV颜色空间阈值主要是靠Trackbar调节阈值和cv2.inRange来生成掩膜来提取。
这是我写的HSV阈值获取的代码:

import cv2
import numpy as np

def MouseBack(value):
    pass

cv2.namedWindow('frams')
cv2.resizeWindow('frams',[400,400])

Video=cv2.VideoCapture(0)

cv2.createTrackbar('minH','frams',0,179,MouseBack)
cv2.createTrackbar('maxH','frams',179,179,MouseBack)
cv2.createTrackbar('minS','frams',0,255,MouseBack)
cv2.createTrackbar('maxS','frams',255,255,MouseBack)
cv2.createTrackbar('minV','frams',0,255,MouseBack)
cv2.createTrackbar('maxV','frams',255,255,MouseBack)

while True:
    res,img=Video.read()
    hsvimg=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    
    minh=cv2.getTrackbarPos('minH','frams')
    maxh=cv2.getTrackbarPos('maxH','frams')    
    mins=cv2.getTrackbarPos('minS','frams')
    maxs=cv2.getTrackbarPos('maxS','frams')
    minv=cv2.getTrackbarPos('minV','frams')
    maxv=cv2.getTrackbarPos('maxV','frams')
    
    lowHSV=np.array((minh,mins,minv),np.uint8)
    highHSV=np.array((maxh,maxs,maxv),np.uint8)
    
    newimg=cv2.inRange(hsvimg,lowHSV,highHSV)
    newimg=cv2.bitwise_and(img,img,mask=newimg)
    
    cv2.imshow('frams',newimg)
    
    if cv2.waitKey(1) == ord('q'):
        print(lowHSV)
        print(highHSV)
        break
        
Video.release()       
cv2.destroyAllWindows()

使用方法:
运行代码之后,从第一个依次调节滑块,使画面中只有手显示出来。然后按Q退出界面打印阈值。
效果如下:
Python使用Opencv图像处理方法完成手势识别(一)

特征提取

准备工作做完,就可以开始进行图像处理了。可以先对单张图片进行处理。

  1. 首先是进行高斯滤波去噪
  2. 然后将图像从BGR转换到HSV
  3. 使用cv2.inRange获得掩膜
  4. 进行形态学操作进一步提取特征
    代码如下:
#读取图片
img=cv2.imread(img_path)
#高斯滤波
Gaussimg=cv2.GaussianBlur(img,[5,5],0)
#HSV转换
hsvimg=cv2.cvtColor(Gaussimg,cv2.COLOR_BGR2HSV)
#获得HSV掩膜
maskimg=cv2.inRange(hsvimg,lowHSV,highHSV)
#开运算
kernel=np.ones([3,3],dtype=np.uint8)
closeimg=cv2.morphologyEx(maskimg,cv2.MORPH_CLOSE,kernel,iterations=3)
#腐蚀
kernel=np.ones([5,5],dtype=np.uint8)
dilateimg=cv2.morphologyEx(closeimg,cv2.MORPH_DILATE,kernel,iterations=3)

效果如下:
Python使用Opencv图像处理方法完成手势识别(一)

轮廓绘制

轮廓绘制首先需要寻找轮廓,然后对轮廓特征,比如面积周长进行进一步过滤,最后对轮廓进行逼近,对轮廓进行逼近有两种。

  1. 轮廓近似cv2.approxPolyDP
  2. 轮廓凸包cv2.convexHull
#寻找轮廓
contours,num=cv2.findContours(newimg,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
    #获得轮廓面积
    area=cv2.contourArea(contour)
    #获得轮廓周长
    lenth=cv2.arcLength(contour,True)
    #阈值判断
    if area>20000 and lenth>1000:
        epsilon = 0.02*cv2.arcLength(contour,True)
        #轮廓近似
        approx1 = cv2.approxPolyDP(contour,epsilon,True)
        #轮廓凸包
        approx2=cv2.convexHull(contour)
        approx1=approx1.reshape(len(approx1),2)
        approx2 = approx2.reshape(len(approx2), 2)
        approx1=np.array(approx1,dtype=np.int32)
        approx2 = np.array(approx2, dtype=np.int32)
        cv2.polylines(faimg, [approx1], True, [255, 125, 100], 4, 16)
        cv2.polylines(f, [approx2], True, [255, 125, 100], 4, 16)

效果如下:
Python使用Opencv图像处理方法完成手势识别(一)

完整代码

import cv2
import numpy as np

highHSV=np.array([ 15 ,255,255])
lowHSV=np.array([ 0 ,50 ,50])

def img_hand(img):
    # if img.shape[0]>1000 and img.shape[1]>1000:
    #     img=cv2.resize(img,None,fx=0.2,fy=0.2)
    faimg=np.copy(img)
    img=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    cv2.GaussianBlur(img,[5,5],0)
    img=cv2.inRange(img,lowHSV,highHSV)

    kernel=np.ones([3,3],dtype=np.uint8)
    img=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel,iterations=1)
    kernel=np.ones([5,5],dtype=np.uint8)
    newimg=cv2.morphologyEx(img,cv2.MORPH_DILATE,kernel,iterations=1)

    contours,num=cv2.findContours(newimg,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
    for contour in contours:
        area=cv2.contourArea(contour)
        lenth=cv2.arcLength(contour,True)
        if area>20000 and lenth>1000:
            epsilon = 0.02*cv2.arcLength(contour,True)
            approx = cv2.approxPolyDP(contour,epsilon,True)
            approx=approx.reshape(len(approx),2)
            approx=np.array(approx,dtype=np.int32)
            cv2.polylines(faimg, [approx], True, [255, 125, 100], 4, 16)
    return faimg

video=cv2.VideoCapture(0)
while video.isOpened():
    res,img=video.read()
    if res== True:
        newimg=img_hand(img)
        cv2.imshow('frams',newimg)
    if cv2.waitKey(1)==ord('q'):
        break

cv2.destroyAllWindows()
video.release()

由于不使用机器学习方法,缺点就是使用时手往前靠一点,头往后靠一点,防止脸的肤色与手混淆,下一章讲解如何识别不同手势。
Python使用Opencv图像处理方法完成手势识别(二)文章来源地址https://www.toymoban.com/news/detail-451735.html

到了这里,关于Python使用Opencv图像处理方法完成手势识别(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python|OpenCV-基本使用和图像处理(1)

    前言 本文是该专栏的第1篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 OpenCV是基于开源许可的跨平台计算机 视觉库 ,起初OpenCV是由Intel公司开发的,直到后面由非营利组织进行维护。提到OpenCV,就不得不说它提供了大量的图像和视频处理函数,使得计算机视觉

    2024年02月12日
    浏览(60)
  • 使用Python和OpenCV进行图像处理和分析

    简介: 图像处理和分析是计算机视觉领域的重要组成部分。本文将介绍如何使用Python编程语言和OpenCV库进行图像处理和分析。我们将涵盖图像读取、显示、滤波、边缘检测和图像分割等常见的图像处理操作,并提供相应的代码示例。 安装OpenCV: 首先,我们需要安装OpenCV库。

    2024年02月12日
    浏览(62)
  • Python 使用多种方法对图像进行锐化处理——图像处理

    fun_01() fun_02() fun_03()      

    2024年02月13日
    浏览(83)
  • Python图像处理:使用OpenCV对图像进行HSV和RGB表示法的转换

    Python图像处理:使用OpenCV对图像进行HSV和RGB表示法的转换 在图像处理中,我们经常需要使用不同的颜色表示法来处理图像。在OpenCV中,我们可以使用HSV(色相、饱和度、亮度)表示法来替代标准的RGB(红、绿、蓝)表示法来处理图像。HSV表示法更为直观和易于使用,因为它将

    2024年02月06日
    浏览(76)
  • OpenCV(图像处理)-基于Oython-滤波器(低通、高通滤波器的使用方法)

    低通滤波 :低通滤波可以去除图像的噪音或平滑图像。 高通滤波 :可以帮助查找图像的边缘。 噪音 :即对一幅图像的产生负面效果,过暗或过亮的部分,一幅图像中,低于或高于某个像素点的值,都可以认为是噪音。 卷积核 :即用来滤波的矩阵,卷积核一般为奇数,如

    2024年02月09日
    浏览(55)
  • python opencv+tkinter 使用tkinter实现交互式图像处理工具

    tkinter 基本控件与使用 我们将学习如何使用Tkinter包编写一些图形用户界面程序。Tkinter是Python的一个标准包,因此我们并不需要安装它。我们将从创建一个窗口开始,然后我们在其之上加入一些小组件,比如按钮,复选框等,并使用它们的一些属性。话不多说,让我们开始吧

    2024年02月10日
    浏览(93)
  • 数字图像处理(实践篇)二十七 Python-OpenCV 滑动条的使用

    目录 1 涉及的函数 2 实践 1 涉及的函数 ⒈ setWindowProperty()用于设置GUI应用程序的属性 参数 : ① 

    2024年01月25日
    浏览(66)
  • python --opencv图像处理(图像腐蚀与图像膨胀)

    图像的腐蚀( Erosion )和膨胀( Dilation )是两种基本的形态学运算,主要用来寻找图像中的极大区域和极小区域。 又出来新名词了:形态学。 图像处理中指的形态学,往往表示的是数学形态学。数学形态学( Mathematical morphology ) 是一门建立在格论和拓扑学基础之上的图像

    2024年02月08日
    浏览(66)
  • 《数字图像处理-OpenCV/Python》连载:形态学图像处理

    本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 形态学图像处理是基于形状的图像处理,基本思想是利用各种形状的结构元进行形态学运算,从图像中提取表达和描绘区域形状的结构信息。形态学运算的数学原

    2024年02月19日
    浏览(81)
  • “Python OpenCV 图像格式转换:RGB与BGR互转“——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是R...

    “Python OpenCV 图像格式转换:RGB与BGR互转”——使用OpenCV库进行图像处理的过程中,经常需要进行不同格式之间的转换。其中最为常见的就是RGB和BGR格式之间的转换。本文将详细介绍如何使用opencv-python库将图像从RGB格式转换为BGR格式以及从BGR格式转换为RGB格式。 要实现图像格

    2024年02月12日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包