博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenCV调用摄像头 , 人脸检测demo
阅读量:4597 次
发布时间:2019-06-09

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

环境:

安装OpenCV:

conda install opencv 或
pip install opencv
安装PIL:
conda install pillow
pip install pillow

效果:

效果图

所需文件:

所需文件

下载链接:
本来是想不收积分的 , 不知道为什么不能选择 0 积分了. 特此我将xml文件的内容贴在本文的最下方 .

代码

import cv2import numpy as npcv2.namedWindow("test")  # 打卡一个窗口 标题为 testcap = cv2.VideoCapture(0)  # 打开笔记本的内置摄像头,0为计算机默认的摄像头# cap = cv2.VideoCapture("test.mp4")  #导入视频文件进行检测success, frame = cap.read()  # 返回true/Flase,和当前截取的这一帧的图片,三维矩阵,(成功截取返回ture)classifier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")  # 产生一个检测器,检测的依据全都储存在参数所代表的那个xml文件中while success:    success, frame = cap.read()  # 再次读取视频文件    size = frame.shape[:2]  # 图片是三维矩阵,要获取图片的长和宽,必须的知道图片的shape,一张图片的shape为[H,W,C],取前两个即得到图片的宽高    image = np.zeros(size, dtype=np.float16)  # 生成了一个 类型为 float16的 0 矩阵    image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # 对读取出来的图片进行颜色空间转换,转换成灰度图    cv2.equalizeHist(image, image)  # 灰度图片直方图均衡化(只接受灰度图)    divisor = 8  # 限制得到目标区域大小和原始图片大小的比例,即最小的检测框为整张图片的八分之一大    h, w = size  # 获取每一帧图片的高/宽    minSize = (w // divisor, h // divisor)  # 最小的检测框为整张图片的八分之一大    faceRects = classifier.detectMultiScale(image, 1.2, 2, cv2.CASCADE_SCALE_IMAGE, minSize)    # 这是一个人脸检测的函数,image为待检测图片,一般为灰度图像加快检测速度,1.2表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%.    # 2表示构成检测目标的相邻矩形的最小个数(默认为3个)。。 这些都是官方给出的。这些参数自己调整以达到自己想要的效果    # 返回值为框住的人脸的坐标(左上角X坐标,左上角Y坐标,框的宽,高)    if len(faceRects) > 0:        for faceRect in faceRects:  # 遍历所得的所有人脸的坐标            x, y, w, h = faceRect  # 返回左上角X坐标,左上角Y坐标,框的宽,高            cv2.rectangle(frame, (x, y), (x + h, y + w), (0, 255, 0), 2)  # 在未做灰度处理前的图片上画矩形框,frame为图片,(x, y)为左上角X,Y坐标,            # (x + h, y + w)为右下角XY坐标,(0, 255, 0)表示红色,2表示画矩形的线宽为2            # # 这里的眼睛嘴巴的坐标是根据人脸框来确定的,所以这里算了下眼睛和嘴巴的大致位子。位置的计算方式不必过分深究。            # cv2.circle(frame, (x + w // 4, y + h // 4 + 30), min(w // 8, h // 8), (255, 0, 0))  # 左眼  参数1为图片,参数2为圆圈中心点坐标,参数3为半径,参数4为颜色            # cv2.circle(frame, (x + 3 * w // 4, y + h // 4 + 30), min(w // 8, h // 8), (255, 0, 0))  # 右眼     同上            # cv2.rectangle(frame, (x + 3 * w // 8, y + 3 * h // 4), (x + 5 * w // 8, y + 7 * h // 8), (255, 0, 0))  # 嘴巴 参数1图片,参数2左上角坐标,参数3右下脚坐标,参数4颜色    cv2.imshow("test", frame)  # 把每一帧的图show 出来    key = cv2.waitKey(10)  # 不断刷新图像,10ms刷新一下,返回一个数字,数字代表的意思不知道    c = chr(key & 255)  # 把数字转换成字符串    if c in ['q', 'Q', chr(27)]:  # 如果C在这个列表的三个中就break        breakcv2.destroyWindow('test')  # 关闭所有窗口

xml文件名: haarcascade_frontalface_default.xml

xml文件内容:

发不了这么长的文章 大家去我的csdn下载吧.

转载于:https://www.cnblogs.com/Mrzhang3389/p/10160624.html

你可能感兴趣的文章
使用postman+newman+python做接口自动化测试
查看>>
实体框架继承关系。很好
查看>>
201671010110 2016 2017 2《java程序设计》
查看>>
flask的基础认识
查看>>
静态blog的免费托管部署、加域名与搜索优化(SEO)
查看>>
oracle trunc(d1[,c1])
查看>>
linux 内核定时器的实现
查看>>
Android和IOS等效MD5加密
查看>>
小房间灯.20190512
查看>>
绘图-路径
查看>>
恢复sudo的权限的命令
查看>>
使用appledoc
查看>>
转:Loadrunner添加服务器监控
查看>>
remove debug symbols to a seperate file
查看>>
ArcGIS ArcMap “ Add Data” 打开后,一直卡死,无内容
查看>>
在C#中使用属性控件添加属性窗口
查看>>
Java 消息队列-Java并发编程 阻塞队列
查看>>
Web Service简介
查看>>
Java 内存模型- Java Memory Model
查看>>
同步锁Lock
查看>>