opencv 人脸检测 java_视频人脸检测——OpenCV版(三)

本文详细介绍了如何利用OpenCV库在视频流中进行人脸检测,通过摄像头捕获帧并应用人脸检测算法,实现实时显示带有框标记的人脸。过程包括摄像头初始化、逐帧处理、人脸检测与定位,并展示了关键代码段和效果预览。
摘要由CSDN通过智能技术生成

视频人脸检测是图片人脸检测的高级版本,图片检测详情点击查看我的上一篇《图片人脸检测——OpenCV版(二)》

往期目录

实现思路:

调用电脑的摄像头,把摄像的信息逐帧分解成图片,基于图片检测标识出人脸的位置,把处理的图片逐帧绘制给用户,用户看到的效果就是视频的人脸检测。

效果预览:

0e470a04eac2d21115e001fd580e7ed3.gif

实现步骤

使用OpenCV调用摄像头并展示

获取摄像头:

cap = cv2.VideoCapture(0)

参数0表示,获取第一个摄像头。

显示摄像头 逐帧显示,代码如下:

while (1):

ret, img = cap.read()

cv2.imshow("Image", img)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

cap.release() # 释放摄像头

cv2.destroyAllWindows() # 释放窗口资源

cv2.waitKey(1) & 0xFF使用了“&”位元算法,含义是获取用户输入的最后一个字符的ASCII码,如果输入的是“q”,则跳出循环。

视频的人脸识别

这个时候,用到了上一节的《图片人脸检测——OpenCV版(二)》 把人脸识别的代码封装成方法,代码如下:

def discern(img):

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cap = cv2.CascadeClassifier(

"C:\Python36\Lib\site-packages\opencv-master\data\haarcascades\haarcascade_frontalface_default.xml"

)

faceRects = cap.detectMultiScale(

gray, scaleFactor=1.2, minNeighbors=3, minSize=(50, 50))

if len(faceRects):

for faceRect in faceRects:

x, y, w, h = faceRect

cv2.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 2) # 框出人脸

cv2.imshow("Image", img)

再循环摄像头帧图片的时候,调用图片识别方法即可,代码如下:

# 获取摄像头0表示第一个摄像头

cap = cv2.VideoCapture(0)

while (1): # 逐帧显示

ret, img = cap.read()

# cv2.imshow("Image", img)

discern(img)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

cap.release() # 释放摄像头

cv2.destroyAllWindows() # 释放窗口资源

完整的代码如下:

# -*- coding:utf-8 -*-

# OpenCV版本的视频检测

import cv2

# 图片识别方法封装

def discern(img):

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cap = cv2.CascadeClassifier(

"C:\Python36\Lib\site-packages\opencv-master\data\haarcascades\haarcascade_frontalface_default.xml"

)

faceRects = cap.detectMultiScale(

gray, scaleFactor=1.2, minNeighbors=3, minSize=(50, 50))

if len(faceRects):

for faceRect in faceRects:

x, y, w, h = faceRect

cv2.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 2) # 框出人脸

cv2.imshow("Image", img)

# 获取摄像头0表示第一个摄像头

cap = cv2.VideoCapture(0)

while (1): # 逐帧显示

ret, img = cap.read()

# cv2.imshow("Image", img)

discern(img)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

cap.release() # 释放摄像头

cv2.destroyAllWindows() # 释放窗口资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值