OpenCV用 C++语言编写, 它的主要接口也是 C++语言, 但是依然保留了大量的 C 语言接口。 该库也有大量的 Python、 Java and MATLAB/OCTAVE(版本 2.5) 的接口。
1.打开摄像头
2.读取摄像头所拍摄的每一帧图像
3.显示每一帧图像
4.对读取到的每一帧图像调用人脸检测函数
–4.1对图像进行灰度转换
–4.2加载opencv的人脸特征库
–4.3调用opencv内置检测函数检测图像
–4.4在图像上用框或圈标识出检测到的特征
–4.5显示出每一帧被标识过的图像
// camera_face_detect
import cv2 as cv
def face_detect_demo(image):
# 灰度转换
gray_image = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# 加载库特征
face_detector = cv.CascadeClassifier(
"D:/Software/opencv/opencv/sources/data/haarcascades"
"/haarcascade_frontalface_default.xml")
left_eye_detector = cv.CascadeClassifier(
"D:/Software/opencv/opencv/sources/data/haarcascades"
"/haarcascade_lefteye_2splits.xml")
right_eye_detector = cv.CascadeClassifier(
"D:/Software/opencv/opencv/sources/data/haarcascades"
"/haarcascade_lefteye_2splits.xml")
# 调用内置检测函数
faces = face_detector.detectMultiScale(gray_image)
left_eyes = left_eye_detector.detectMultiScale(gray_image)
right_eyes = right_eye_detector.detectMultiScale(gray_image)
# 在图像上用框、圈标记
for x,y,w,h in faces:
cv.rectangle(image, (x,y),(x+w,y+h), color=(0,0,255), thickness=2)
for x2,y2,w2,h2 in left_eyes:
cv.rectangle(image, (x2,y2),(x2+w2,y2+h2), color=(0,255,0), thickness=2)
for x3,y3,w3,h3 in right_eyes:
cv.rectangle(image, (x3,y3),(x3+w3,y3+h3), color=(0,255,0), thickness=2)
# 显示标记后的图像
cv.imshow('result',image)
# 参数为0表示打开笔记本内置摄像头
# cv.CAP_DSHOW不加的话会有内存释放的报错
cap = cv.VideoCapture(0, cv.CAP_DSHOW)
while True:
flag, imag = cap.read()
if not flag:
break
cv.imshow('window', imag)
if ord('q') == cv.waitKey(10):
break
# 检测摄像头识别到的人脸
face_detect_demo(imag)
cv.destroyAllWindows()