import cv2
# 初始化网络摄像头
cap = cv2.VideoCapture(0)
# 定义网格摄像头采集图像比例系数
scaling_factor = 0.5
# 循环采集直到按下Esc键
while True:
# 采集当前画面
ret, frame = cap.read()
# 调整帧的大小
frame = cv2.resize(frame, None, fx=scaling_factor, fy=scaling_factor,
interpolation=cv2.INTER_AREA)
# 显示帧
cv2.imshow('Webcam', frame)
# 等待1秒,然后采集帧,检查是否按了Esc键
c = cv2.waitKey(1)
if c == 27:
break
# 释放视频采集对象
cap.release()
# 关闭所有窗口
cv2.destroyAllWindows()
Haar级联通过在多个尺度上从图像中提取大量的简单特征来实现,简单特征主要指边线、矩形特征等,这些特征都非常易于计算,然后通过创建一系列简单的分类器来做训练。
import cv2
import numpy as np
# 导入人脸检测级联文件
face_cascade = cv2.CascadeClassifier('cascade_files/haarcascade_frontalface_alt.xml')
# 确定级联文件是否正确的加载
if face_cascade.empty():
raise IOError('Unable to load the face cascade classifier xml file')
# 初始化视频采集对象
cap = cv2.VideoCapture(0)
# 定义图像向下采样的比例系数
scaling_factor = 0.5
# 循环采集直到按下Esc键
while True:
# 采集当前帧并进行调整
ret, frame = cap.read()
frame = cv2.resize(frame, None, fx=scaling_factor, fy=scaling_factor,
interpolation=cv2.INTER_AREA)
# 将图像转化为灰度
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 在灰度图像上运行人脸检测器
face_rects = face_cascade.detectMultiScale(gray, 1.3, 5)
# 在脸部画出矩形
for (x,y,w,h) in face_rects:
cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 3)
# 展示出图像
cv2.imshow('Face Detector', frame)
# 检查是否按下Esc键
c = cv2.waitKey(1)
if c == 27:
break
# 释放视频采样对象并关闭窗口
cap.release()
cv2.destroyAllWindows()
import cv2
import numpy as np
# 人脸,眼睛,和鼻子级联文件
face_cascade = cv2.CascadeClassifier('cascade_files/haarcascade_frontalface_alt.xml')
eye_cascade = cv2.CascadeClassifier('cascade_files/haarcascade_eye.xml')
nose_cascade = cv2.CascadeClassifier('cascade_files/haarcascade_mcs_nose.xml')
# 检查脸部级联文件是否加载
if face_cascade.empty():
raise IOError('Unable to load the face cascade classifier xml file')
# 检查眼睛级联文件是否加载
if eye_cascade.empty():
raise IOError('Unable to load the eye cascade classifier xml file')
# 检查鼻子级联文件是否加载
if nose_cascade.empty():
raise IOError('Unable to load the nose cascade classifier xml file')
# 初始化视频采集对象并定义比例系数
cap = cv2.VideoCapture(0)
scaling_factor = 0.5
while True:
# 读取当前帧画面,调整大小,转化为灰度
ret, frame = cap.read()
frame = cv2.resize(frame, None, fx=scaling_factor, fy=scaling_factor,
interpolation=cv2.INTER_AREA)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 在灰度图像上运行人脸检测器
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 在每张脸的矩形区域运行眼睛和鼻子检测器
for (x,y,w,h) in faces:
# 从彩色与灰度图中提取人脸ROI信息
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
# 在灰度图ROI信息中检测眼睛
eye_rects = eye_cascade.detectMultiScale(roi_gray)
# 在灰度图ROI信息中检测鼻子
nose_rects = nose_cascade.detectMultiScale(roi_gray, 1.3, 5)
# 在眼睛周围画绿色的圈
for (x_eye, y_eye, w_eye, h_eye) in eye_rects:
center = (int(x_eye + 0.5*w_eye), int(y_eye + 0.5*h_eye))
radius = int(0.3 * (w_eye + h_eye))
color = (0, 255, 0)
thickness = 3
cv2.circle(roi_color, center, radius, color, thickness)
for (x_nose, y_nose, w_nose, h_nose) in nose_rects:
cv2.rectangle(roi_color, (x_nose, y_nose), (x_nose+w_nose,
y_nose+h_nose), (0,255,0), 3)
break
# 展示图像
cv2.imshow('Eye and nose detector', frame)
# 检查是否按了Esc键
c = cv2.waitKey(1)
if c == 27:
break
# R释放视频采样对象,并关闭窗口
cap.release()
cv2.destroyAllWindows()
文中用到的人脸,眼睛,和鼻子级联文件都已经上传到csdn。下载地址:https://download.csdn.net/download/qq_41251963/10611907