图像处理算法识别手势

目录

1 实验目的

2 项目介绍

3 项目思路

3.1 图像处理模块

3.2 GUI模块

4 源代码

5 运行结果图

6 调试日志

7 项目优化


1 实验目的

使用OpenCV库来获取摄像头的视频流,并通过手势分析来快速准确地检测出1至5的手势。该程序通过采集视频帧并对其进行处理来分析手势。它使用图像处理算法来提取手势的形状,并根据手部的位置和轮廓来确定手势是哪个数字。运行程序后,摄像头将启动,并在摄像头下方的区域显示视频流。将手放在这个区域中,并展示你想识别的数字。程序会在摄像头捕捉到手势后立即返回相应的数字。虽然这种方法没有使用机器学习技术,但同样可以识别手势,并且运算速度较快,适合在一些低配置的设备上进行使用。

2 项目介绍

本项目目前使用到和未来可能使用的第三方库或者模块有:

介绍

tkinter

Tkinter是Python内置的GUI库,它提供了一个简单、易于使用的界面设计工具,可以创建各种窗口和控件,如文本框、标签、按钮等,方便用户与程序交互。Tkinter是Tcl/Tk GUI工具包在Python中的接口,Tcl/Tk是一个跨平台的图形用户界面(GUI)工具包,它是在现代操作系统中提供标准GUI工具包的一种选择。

cv2(OpenCV)

OpenCV是一个基于开源发行的跨平台计算机视觉库,包含了数百个计算机视觉算法和工具,它可以跨平台使用,并提供了Python、C++等语言支持,常用于图像和视频处理、目标检测、人脸识别等方面的应用程序开发。cv2是Python中OpenCV库的接口,可以使用Python调用OpenCV提供的算法库和工具,用来完成各种计算机视觉任务,包括:

1)图像和视频读写、显示和保存

2)图像预处理、滤波和边缘检测

3)物体检测和跟踪、人脸识别、光流估计等

4)图像变换和几何变换

5)相机标定和姿态估计等

PIL(pillow)

Image库是PIL中最核心的库之一,用于读取、处理和保存图像数据。

以下是一些Image库的主要功能:

打开和保存图像文件,支持JPEG、PNG、BMP、GIF、ICO和TIFF等格式。

1)提供了基本的图像处理方法,如裁剪、旋转、缩放、镜像、转换为黑白图等。

2)提供了滤镜效果,如模糊、轮廓、锐化、浮雕、柔化、颜色空间转换等。

3)支持像素级别的操作,包括像素的读取、修改、合并等。

4)支持文本渲染、字体调用和排版等。

ImageTk是Python的一个模块,用于将PIL库的图像转换为Tkinter库中的图像格式,方便在Tkinter GUI程序中显示和操作图像。

sklearn.metrics

sklearn.metrics是Scikit-learn库的一个模块,提供了一系列的评估指标和工具,用于评估模型的性能和质量,包括分类、回归、聚类等算法的评估。

sys

sys是Python中的一个内置模块,提供了对Python解释器的访问和控制,包括操作系统、环境变量、标准输入输出等功能。

numpy

NumPy是Python的一个非常重要的数值计算库,提供了各种多维数组操作、线性代数、傅里叶变换、随机数生成等函数,是数据分析、科学计算和机器学习等领域中必不可少的工具之一。NumPy的核心是ndarray(N-dimensional array,多维数组),是一个具有相同类型和大小的元素网格。

SciPy

SciPy 是一个开源的,基于 Python 的计算生态系统,用于执行科学、工程和技术计算。它构建在 NumPy 库之上,为高级计算提供了许多实用的模块和函数。这些模块包括线性代数、优化算法、信号和图像处理、统计和随机模拟等,比如图像二值化和形态学操作等。

表1 此项目所涉及的第三方库或模块

用到的方法

用法

root = tk.Tk()

使用 tkinter 模块创建了一个 GUI 窗口的根节点对象(即一个 Tk() 对象)。

root.geometry("宽x高+

X轴偏移量+

Y轴偏移量")

设置窗口位置和大小的方法:“宽”表示窗口的宽度;“高”表示窗口的高度;“ X轴偏移量”表示窗口左上角相对于屏幕左边缘的横向偏移量;“Y轴偏移量”表示窗口左上角相对于屏幕上边缘的纵向偏移量。root.geometry('400x400')只设置宽度和高度,不设置偏移量,这样窗口将会出现在屏幕的中央

root.title("窗口标题")

设置窗口的标题,即在窗口的顶部栏中显示的文字。

filedialog.askopenfilename() 

方法用于打开一个文件对话框,并返回用户所选择文件的路径。该方法有以下参数:initialdir指定对话框中显示的初始目录;title指定对话框的标题;filetypes指定要显示哪些类型的文件,这里限定只能选择.jpg和.png两种类型的文件。iledialog.askopenfilename(initialdir='/',title='SelectImage',   filetypes=(('JPEG iles', '*.jpg'), ('PNG files', '*.png')))
参数设置为 '/',表示打开对话框时默认显示的目录为操作系统的根目录。具体来说,对于 Windows 系统,根目录为 C:\

background=frame.copy().

astype("float")

这行代码将一个名为"frame"的变量复制,并将其转换为浮点类型,并将其分配给名为"background"的新变量。这可能是用于计算视频分离技术中的背景模型的一部分。

root.mainloop()

进入窗口事件循环,等待并处理用户的交互,直到窗口被关闭为止,必须调用的方法。在创建窗口和完成窗口设置之后,该方法将进入一个无限循环,等待处理窗口事件(如鼠标点击、键盘按键、窗口关闭等)。只有当窗口被关闭时,该循环才会停止。

cv2.accumulateWeighted(

frame,

background,

accumulated_weight)

这段代码使用了OpenCV中的accumulateWeighted函数,用于在获取视频流过程中实时计算当前视频帧和背景的加权平均值,以更新背景模型。frame是当前读取的视频帧,background是当前背景模型,accumulated_weight是加权平均值的系数。通过计算加权平均值,程序可以利用背景模型来准确分析视频帧中的移动对象。随着时间的推移,背景模型将因为被动了多次而不断更新,以适应环境中的变化和移动对象。

cv2.absdiff(background.

astype('uint8'), frame)

这段代码使用了OpenCV中的absdiff函数,用于计算两个图像的差异(绝对值差分)。background是背景模型,即计算平均加权值得到的图像;frame是当前读取的视频帧。函数会返回两个图像的差分结果,表示这两个图像之间的绝对值差异。通过计算背景模型和当前视频帧之间的差异,程序可以检测到当前视频帧中的像素变化,例如移动对象、光线变化等。

ret, thresholded =

cv2.threshold(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值