手势识别系列文章目录
手势识别是一种人机交互技术,通过识别人的手势动作,从而实现对计算机、智能手机、智能电视等设备的操作和控制。
1. opencv实现手部追踪(定位手部关键点)
2.opencv实战项目 实现手势跟踪并返回位置信息(封装调用)
3.手势识别-手势音量控制(opencv)
4.opencv实战项目 手势识别-手势控制鼠标
5.opencv实战项目 手势识别-手部距离测量
6.opencv实战项目 手势识别-实现尺寸缩放效果
未完待续
目录
1.简介
2.代码思路
3.代码详解
代码需要用到opencv cvzone模块 pickle模块
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉功能,旨在帮助开发者在各种应用领域中实现图像处理、分析和计算机视觉任务
功能丰富:OpenCV提供了广泛的图像处理、计算机视觉、机器学习和深度学习功能。这些功能包括图像增强、特征提取、对象检测、人脸识别、图像分割、运动跟踪等。
跨平台:OpenCV是跨平台的,可以在多种操作系统上运行,包括Windows、Linux、macOS等。
多语言支持:OpenCV支持多种编程语言,如C++、Python、Java等。这使得开发者可以使用自己熟悉的编程语言来使用OpenCV库。
高效优化:OpenCV库被优化用于高性能计算。它使用了硬件加速、并行处理和优化算法,以在各种硬件平台上提供高效的计算速度。
图像和视频处理:OpenCV支持从图像文件和摄像头中读取图像和视频数据。它可以进行图像预处理、过滤、几何变换、颜色空间转换等。
计算机视觉任务:OpenCV包括各种计算机视觉任务的算法和功能,如物体检测、人脸识别、手势识别、运动跟踪、目标追踪等。
深度学习集成:OpenCV也集成了一些深度学习框架,如TensorFlow和PyTorch,使得开发者可以结合深度学习模型来执行更复杂的视觉任务。
开源社区:OpenCV是一个活跃的开源项目,有着庞大的开发者社区。这意味着你可以找到大量的教程、示例代码和解决方案,帮助你解决各种视觉问题。
视频输入与读取:
cv2.VideoCapture
打开一个视频文件作为输入。cap.read()
读取视频的每一帧图像。图像预处理:
停车位检测(checkParkingSpace
函数):
cv2.countNonZero
计算每个停车位区域内非零(白色)像素的数量。这相当于计算了停车位区域内的白色像素数量,用于判断是否有车辆停放在该位置。结果显示:
循环处理:
import cv2
import pickle
import cvzone
import numpy as np
# Video feed
cap = cv2.VideoCapture('carPark.mp4')
with open('CarParkPos', 'rb') as f:
posList = pickle.load(f)
width, height = 107, 48
def checkParkingSpace(imgPro):
spaceCounter = 0
for pos in posList:
x, y = pos
imgCrop = imgPro[y:y + height, x:x + width]
# cv2.imshow(str(x * y), imgCrop)
count = cv2.countNonZero(imgCrop)
if count < 900:
color = (0, 255, 0)
thickness = 5
spaceCounter += 1
else:
color = (0, 0, 255)
thickness = 2
cv2.rectangle(img, pos, (pos[0] + width, pos[1] + height), color, thickness)
cvzone.putTextRect(img, str(count), (x, y + height - 3), scale=1,
thickness=2, offset=0, colorR=color)
cvzone.putTextRect(img, f'Free: {spaceCounter}/{len(posList)}', (100, 50), scale=3,
thickness=5, offset=20, colorR=(0,200,0))
while True:
if cap.get(cv2.CAP_PROP_POS_FRAMES) == cap.get(cv2.CAP_PROP_FRAME_COUNT):
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
success, img = cap.read()
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray, (3, 3), 1)
imgThreshold = cv2.adaptiveThreshold(imgBlur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
cv2.THRESH_BINARY_INV, 25, 16)
imgMedian = cv2.medianBlur(imgThreshold, 5)
kernel = np.ones((3, 3), np.uint8)
imgDilate = cv2.dilate(imgMedian, kernel, iterations=1)
checkParkingSpace(imgDilate)
cv2.imshow("Image", img)
# cv2.imshow("ImageBlur", imgBlur)
# cv2.imshow("ImageThres", imgMedian)
cv2.waitKey(10)
代码讲解
导入所需的库:
cv2
:OpenCV库,用于图像处理和计算机视觉任务。pickle
:用于序列化和反序列化Python对象。cvzone
:这是一个基于OpenCV的库,用于在图像上绘制文本和形状。numpy
:用于数组操作和数学计算。打开视频文件并读取停车位位置信息:
cap = cv2.VideoCapture('carPark.mp4')
:打开名为'carPark.mp4'的视频文件作为输入。with open('CarParkPos', 'rb') as f:
:使用二进制模式打开名为'CarParkPos'的文件,其中包含停车位的位置信息。posList = pickle.load(f)
:从文件中加载停车位位置信息,并将其存储在posList
变量中。定义一个用于检查停车位空闲情况的函数checkParkingSpace(imgPro)
:
spaceCounter
用于计算空闲停车位的数量。imgCrop
。cv2.countNonZero(imgCrop)
计算该区域中非零像素的数量(即白色像素数量)。进入主循环:
cap.read()
读取视频的下一帧图像。checkParkingSpace()
函数,传入经过处理的图像。cv2.imshow()
显示处理后的图像,并等待用户按键(cv2.waitKey(10)
)。视频文件
链接:https://pan.baidu.com/s/1TiNlSBF6I1lHvEr2YIxlBA
提取码:8vw3
有遇到的问题欢迎评论区留言