博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
视频人脸检测——OpenCV版(三)
阅读量:4350 次
发布时间:2019-06-07

本文共 2158 字,大约阅读时间需要 7 分钟。

视频人脸检测是图片人脸检测的高级版本,图片检测详情点击查看我的上一篇 

 

往期目录

 

更多更新,欢迎访问我的github:

实现思路:

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

效果预览:

实现步骤

使用OpenCV调用摄像头并展示

获取摄像头:

cap = cv2.VideoCapture(0)

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

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

while (1):     ret, img = cap.read()    cv2.imshow("Image", img)    if cv2.waitKey(1) & 0xFF == ord('q'):        breakcap.release()  # 释放摄像头cv2.destroyAllWindows()  # 释放窗口资源

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

视频的人脸识别

这个时候,用到了上一节的 把人脸识别的代码封装成方法,代码如下:

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'):        breakcap.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'):        breakcap.release()  # 释放摄像头cv2.destroyAllWindows()  # 释放窗口资源

 

 

转载于:https://www.cnblogs.com/vipstone/p/8933916.html

你可能感兴趣的文章
洛谷P1317 低洼地
查看>>
MVC Redirect 页面跳转不了
查看>>
李开复有哪些地方做的不好
查看>>
12.22
查看>>
新版本的molar mass(uva-1586)明明debug过了,各种测试还是WA真是气死我了
查看>>
gdb(ddd,kdevelop等)调试ZeroIce开发的应用程序,中断信号引起的问题
查看>>
牛股助推器(每股收益率)
查看>>
SpringCloud+feign 基于Springboot2.0 负载均衡
查看>>
【BZOJ5094】硬盘检测 概率
查看>>
mac上n次安装与卸载mysql
查看>>
Python之单元测试——HTMLTestRunner
查看>>
flappy pig小游戏源码分析(4)——核心pig模块(未完待续)
查看>>
14. 最长公共前缀
查看>>
[转载]使用Vitamio打造自己的Android万能播放器(6)——在线播放(播放列表)...
查看>>
datazen logo修改
查看>>
UVA 714 二分最大化最小值
查看>>
Java 基础 —— enum
查看>>
matlab 神经网络工具箱的实用
查看>>
mathematica的图像处理0--七夕特刊
查看>>
[LeetCode] Ugly Number II
查看>>