OpenCV利用手势识别实现虚拟拖放效果
目录
- 第一步
- 第二步
- 第三步
- 完整代码
第一步 通过opencv设置显示框和调用摄像头显示当前画面
import cv2cap = cv2.VideoCapture(0)cap.set(3,1280)cap.set(4,720)while True:succes, img = cap.read()cv2.imshow("Image", img)cv2.waitKey(1)
第二步 在当前画面中找到手,本文将使用cv zone中的手跟踪模块
from cvzone.HandTrackingModule import HandDetectordetector = HandDetector(detectionCon=0.8)#更改了默认的置信度,让其检测更加准确
找到手的完整代码
import cv2from cvzone.HandTrackingModule import HandDetectorcap = cv2.VideoCapture(0)cap.set(3,1280)cap.set(4,720)detector = HandDetector(detectionCon=0.8)while True:succes, img = cap.read()detector.findHands(img)lmList, _ = detector.findPosition(img)cv2.imshow("Image", img)cv2.waitKey(1)
文章图片
第三步 第三步首先创建一个方块
cv2.rectangle(img, (100,100), (300,300), (0, 0 , 255),cv2.FILLED)
【OpenCV利用手势识别实现虚拟拖放效果】
文章图片
然后检测我们的食指有没有进入到这个方框中,如果进入的话,这个方框就改变颜色
if lmList:cursor = lmList[8]if 100
文章图片
然后检测我们是否点击这个方框
当我们食指的之间在这个方框的中心,就会跟随为我们的指尖运动。
文章图片
但是这样的话,我们不想这个方块跟随我,我就得很快的将手移开,不是很方便。
所以我们要模拟鼠标点击确定是否选中它,所以我们就在加入了一根中指来作为判断,那判断的依据就是中指和食指指尖的距离。
l,_,_ = detector.findDistance(8,12,img)
文章图片
假设俩指尖的距离小于30就选中,大于30就取消
if l<30:cursor = lmList[8]if cx-w//2
完整代码import cv2from cvzone.HandTrackingModule import HandDetectorcap = cv2.VideoCapture(0)cap.set(3,1280)cap.set(4,720)colorR =(0, 0, 255)detector = HandDetector(detectionCon=0.8)cx, cy, w, h= 100, 100, 200, 200while True:succes, img = cap.read()img = cv2.flip(img, 1)detector.findHands(img)lmList, _ = detector.findPosition(img)if lmList:l,_,_ = detector.findDistance(8,12,img)print(l)if l<30:cursor = lmList[8]if cx-w//2
到此这篇关于OpenCV利用手势识别实现虚拟拖放效果的文章就介绍到这了,更多相关OpenCV手势识别 虚拟拖放内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Python如何使用opencv进行手势识别详解
- Clion配置opencv开发环境的详细过程
- 如何利用Vue+Element做个小页面
- 如何利用Python将字典转为成员变量
- 程序人生|利用编码特长,我赚取了每月1000美元的额外收入
- 果冻行业遭遇“寒冬”(全球畅销零食品牌利用数据提升市场竞争力)
- 网络安全|SQL注入攻击详解
- opencv——OpenCV中的滑动条
- 图像处理|Opencv学习笔记 透视变换(perspective transform)
- opencv|opencv学习笔记(七)几何变换、阈值处理、平滑处理