我将分享一个完整的项目,从基础库安装到人脸识别,做一个可视化的界面。
1、opencv-python安装
要调用电脑摄像头得安装在python种安装opencv库;使用
pip install opencv-python #用于安装opencv库
2、代码调用电脑摄像头
安装成功后我们就可以使用opencv库打开笔记本摄像头,调用完成摄像头后,我们要逐帧显示,这里我们就要用到while函数不断显示摄像头获取的每一帧图像,使用cap.isOpened()判断摄像头开启就不断循环,代码演示如下:
import cv2
#调用摄像头
# VideoCapture的参数是指调用电脑那个摄像头,笔记本电脑一般默认为0
cap=cv2.VideoCapture(0)
while cap.isOpened():
#读取视频
ret,frame=cap.read()
#第一个ret 为True 或者False,代表有没有读取到图片
#第二个frame表示截取到一帧的图片
frame=cv2.flip(frame,flipCode=1)
#判读是否按下q键,按下q键关闭摄像头;
if cv2.waitKey(30)&0xff==ord('q'):
break
#显示画面
cv2.imshow('face',frame)
#释放摄像头
cap.release()
#销毁窗口
cv2.destroyAllWindows()
在上述代码中,cv2.waitKey(30)
是一个等待键盘输入的函数,它会等待指定的时间(以毫秒为单位),并返回按下的键盘字符的ASCII码。
0xFF
是一个掩码,用于将结果限制为8位,即按位与运算保留最低8位。
ord('q')
返回字符 'q' 的ASCII码值,是8位的。
cv2.waitKey(30)
返回一个整数,具体的位数取决于你正在使用的平台和OpenCV库的配置。
在大多数情况下,cv2.waitKey()
返回一个32位的整数,其中最低8位存储了按下键的ASCII码值(0-255范围),而高24位则被设置为0。
然而,有些平台和OpenCV库的配置可能不同,可能返回一个16位的整数或其他位数。为了确保按位与运算结果的准确性,通常会使用 & 0xFF
运算符来限制结果为8位,不管返回值的位数是多少。
因此,即使cv2.waitKey()
返回值的位数可能不同,在使用cv2.waitKey(30) & 0xFF == ord('q')
表达式时,通过 & 0xFF
操作符会将其限制为8位,以便与ASCII码值进行比较。这样可以保证在不同配置下都能正确判断是否按下了 'q' 键。
cv2.VideoCapture()设置不同参数可以调用不同摄像头,笔记本电脑一般都是默认为0,还可以打开本地视频,将本地视频地址放进去就可以了。
可以通过cap.get(propId)来查看视频相关参数信息。propId范围是0到18之间的整数,不同的数值表示不同属性,自己可以尝试一下。如果感觉人脸视频窗口很小可以使用cap.set(propId,value)来设置窗口大小,cap.get(3)和cap.get(4)来查看每一帧画面的宽和高,默认是640x480。我们可以使用ret=cap.set(3,1080)和ret = cap.set(4,720)来把宽和高改成1080*720。数字5帧速率,7是返回帧数。我就介绍这这个数字。
代码中的cv2.file()是进行画面翻转的,里面需要给定两个参数,
cv2.flip(filename, flipcode)
- 第一个参数filename:是需要翻转的画面,
- 第二个参数flipcode:表示翻转的方式,
filpcode | 翻转方式 |
---|---|
-1 | 水平垂直翻转 |
0 | 垂直翻转 |
1 | 水平翻转 |
接下来我们看看获取出来的摄像头画面图片有点模糊一是摄像头像素低二是GIF图片被压缩过。
下一张文章我将分享opencv人脸检测。
我编写的一个opencv人脸识别案例:地址YueXia/Face-opencv - 码云 - 开源中国 (gitee.com)
个人博客网站灵动空间,欢迎访问