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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。