文章目录

  • ​​1.利用opencv打开摄像头​​
  • ​​2.调用摄像头实现人脸识别​​
  • ​​图像识别位置信息​​
  • ​​函数讲解​​
  • ​​按键函数——cv2.waitkey()​​
  • ​​视频流获取——cv2.VideoCapture().read()​​

1.利用opencv打开摄像头

import cv2
# 1.打开摄像头,读取摄像头拍摄到的角度
vedio_capter = cv2.VideoCapture(0)
# 2.循环不停的获取摄像头的画面,并做进一步的处理
while True:
# 2.1获取摄像头拍摄到的画面,并做进一步的处理
ret, frame = vedio_capter.read() # ret是指是否返回画面true和false,frame是指读取到的视频的帧
# 2.2 通过opencv把拍摄到的画面展示出来
cv2.imshow('Vedio', frame)
# 2.3 按q退出while循环,即退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break

video_capter.realease()

2.调用摄像头实现人脸识别

import os
import cv2
import face_recognition
'''
#人脸数据库
face_databases_dir = 'face_databases'
user_names = [] #存放用户姓名
user_faces_encodings = [] #存放用户脸部特征向量(一一对应)

files = os.listdir('face_databases')

for file_name in files:

'''
# 1.打开摄像头,读取摄像头拍摄到的角度
vedio_capter = cv2.VideoCapture(0)
# 2.循环不停的获取摄像头的画面,并做进一步的处理
while True:
# 2.1获取摄像头拍摄到的画面,并做进一步的处理
ret, frame = vedio_capter.read() # ret是指是否返回画面true和false,
# 2.2从拍摄到的画面提取出人的脸部所在的区域
face_locations = face_recognition.face_locations(frame)
# 2.3 循环比那里人的脸部所在的区域并画框
for top, right, bottom, left in face_locations:
cv2.rectangle(frame, (left, top), (right, bottom), (0,255,0), 2)
# 2.4 通过opencv把拍摄到的并花了框的画面展示出来
cv2.imshow('Vedio', frame)
# 2.5 按q退出while循环,即退出程序
if cv2.waitKey(1) & 0xFF == ord('q'):
break

video_capter.realease()

运行结果:

opencv-python——调用python库通过电脑摄像头实现人脸识别_ide

图像识别位置信息

face_locations是一个列表,存储了图像的位置坐标信息:

图像位置:

返回坐标为:​​左上角坐标​​​和​​右下角坐标​

opencv-python——调用python库通过电脑摄像头实现人脸识别_代码示例_02

函数讲解

按键函数——cv2.waitkey()

cv2.waitkey(delay)
  • 功能:等待键盘'key'键的输入
  • 参数:​​delay​​表示延时多少秒切换到下一帧图像
  • 返回值:键盘输入的字符串对应的​​ASCII码​

代码示例:

cv2.waitKey(1) == ord(‘Key’)
  • 表示延时1ms切换到下一帧图像,对于视频而言
        0:只显示当前帧图像,相当于视频暂停
        key:要输入键盘的键

waitKey()–这个函数是在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下 键,则接续等待(循环)
1.2 如下所示: while(1){ if(waitKey(100)==27)break; } 在这个程序中,我们告诉OpenCv等待用户触发事件,等待时间为100ms,如果在这个时间段内, 用户按下ESC(ASCII码为27),则跳出循环,否则,则继续循环
1.3 如果设置waitKey(0),则表示程序会无限制的等待用户的按键事件

视频流获取——cv2.VideoCapture().read()

ret, frame = cv2.VideoCapture(0).read()
  • 功能:读取一帧的图片。
  • 参数:​​vedio​​对应的编号,一般都是0
  • 返回值​​ret​​​:bool值
    True:读取到图片;
    False:没有读取到图片。
  • 返回值​​frame​​:当前帧的图片。

代码示例:

vedio_capter = cv2.VideoCapture(0)
ret, frame = vedio_capter.read()
  • ​ret​​:是指这一帧是否有接收到画面
  • ​frame​​:这一帧的图片

参考文章:

  • ​​waitKey()函数详解​​