示范建设验收网站,wordpress中文cms主题,电子网站大全,互联网设计师是干什么的手势识别系列文章目录 手势识别是一种人机交互技术#xff0c;通过识别人的手势动作#xff0c;从而实现对计算机、智能手机、智能电视等设备的操作和控制。
1. opencv实现手部追踪#xff08;定位手部关键点#xff09;
2.opencv实战项目 实现手势跟踪并返回位置信息通过识别人的手势动作从而实现对计算机、智能手机、智能电视等设备的操作和控制。
1. opencv实现手部追踪定位手部关键点
2.opencv实战项目 实现手势跟踪并返回位置信息封装调用
3.手势识别-手势音量控制opencv
4.opencv实战项目 手势识别-手势控制鼠标
5.opencv实战项目 手势识别-手部距离测量
6.opencv实战项目 手势识别-实现尺寸缩放效果
未完待续
目录
1.简介
2.代码思路 3.代码详解 代码需要用到opencv cvzone模块 pickle模块
1.简介
OpenCVOpen Source Computer Vision Library是一个开源的计算机视觉库它提供了丰富的图像处理和计算机视觉功能旨在帮助开发者在各种应用领域中实现图像处理、分析和计算机视觉任务 功能丰富OpenCV提供了广泛的图像处理、计算机视觉、机器学习和深度学习功能。这些功能包括图像增强、特征提取、对象检测、人脸识别、图像分割、运动跟踪等。 跨平台OpenCV是跨平台的可以在多种操作系统上运行包括Windows、Linux、macOS等。 多语言支持OpenCV支持多种编程语言如C、Python、Java等。这使得开发者可以使用自己熟悉的编程语言来使用OpenCV库。 高效优化OpenCV库被优化用于高性能计算。它使用了硬件加速、并行处理和优化算法以在各种硬件平台上提供高效的计算速度。 图像和视频处理OpenCV支持从图像文件和摄像头中读取图像和视频数据。它可以进行图像预处理、过滤、几何变换、颜色空间转换等。 计算机视觉任务OpenCV包括各种计算机视觉任务的算法和功能如物体检测、人脸识别、手势识别、运动跟踪、目标追踪等。 深度学习集成OpenCV也集成了一些深度学习框架如TensorFlow和PyTorch使得开发者可以结合深度学习模型来执行更复杂的视觉任务。 开源社区OpenCV是一个活跃的开源项目有着庞大的开发者社区。这意味着你可以找到大量的教程、示例代码和解决方案帮助你解决各种视觉问题。 2.代码思路 视频输入与读取 通过cv2.VideoCapture打开一个视频文件作为输入。使用cap.read()读取视频的每一帧图像。 图像预处理 将每一帧图像转换为灰度图像以简化后续处理。对灰度图像应用高斯模糊减少图像中的噪声。使用自适应阈值方法将图像分割为前景车辆和背景停车位。 停车位检测checkParkingSpace函数 针对预定义的停车位位置从文件加载得到在阈值图像中提取每个停车位的区域。使用cv2.countNonZero计算每个停车位区域内非零白色像素的数量。这相当于计算了停车位区域内的白色像素数量用于判断是否有车辆停放在该位置。根据计算出的非零像素数量判断停车位是否空闲。如果非零像素数量低于某个阈值例如900则认为停车位为空闲否则认为停车位被占用。在原始图像上使用矩形框和文本标记出停车位的状态以及区域内非零像素的数量。 结果显示 在图像上绘制检测结果使用不同的颜色标记空闲和占用的停车位以及停车位区域内的像素数量信息。在图像上绘制空闲停车位的总数量以及总停车位数量。 循环处理 循环处理视频的每一帧重复上述步骤。如果视频处理完毕重置视频的位置以便重新播放视频。 3.代码详解
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, 48def checkParkingSpace(imgPro):spaceCounter 0for pos in posList:x, y posimgCrop 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 5spaceCounter 1else:color (0, 0, 255)thickness 2cv2.rectangle(img, pos, (pos[0] width, pos[1] height), color, thickness)cvzone.putTextRect(img, str(count), (x, y height - 3), scale1,thickness2, offset0, colorRcolor)cvzone.putTextRect(img, fFree: {spaceCounter}/{len(posList)}, (100, 50), scale3,thickness5, offset20, 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, iterations1)checkParkingSpace(imgDilate)cv2.imshow(Image, img)# cv2.imshow(ImageBlur, imgBlur)# cv2.imshow(ImageThres, imgMedian)cv2.waitKey(10)
代码讲解 导入所需的库 cv2OpenCV库用于图像处理和计算机视觉任务。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)计算该区域中非零像素的数量即白色像素数量。如果非零像素数量小于900表示该停车位空闲将矩形框和文本标记为绿色计数器增加。否则表示停车位已被占用将矩形框和文本标记为红色。 进入主循环 循环用于处理视频帧。首先检查是否已经到达视频的末尾如果是则将视频的位置重置到开头。使用cap.read()读取视频的下一帧图像。将图像转换为灰度图像然后应用高斯模糊、自适应阈值等图像处理步骤以提取停车位的信息。调用之前定义的checkParkingSpace()函数传入经过处理的图像。在图像上绘制检测结果的矩形框和文本信息。使用cv2.imshow()显示处理后的图像并等待用户按键cv2.waitKey(10))。 视频文件
链接https://pan.baidu.com/s/1TiNlSBF6I1lHvEr2YIxlBA 提取码8vw3 有遇到的问题欢迎评论区留言