opencv-python学习一--人脸检测
2019独角兽企业重金招聘Python工程师标准>>>
简略的介绍一下 : opencv是什么? , 人脸检测是什么?
最近对机器学习有点感兴趣,想直接从图像识别入手,这里选择了鼎鼎有名的 opencv ,一开始想直接调用opencv的api进行人脸的检测,功能也特简单,一:检测出人脸,用方框标记一下,二:输出图片中存在几个人.
在opencv的 example 中找到了已经写好的示例,示例是对一个video中的图像识别,这里做一个简化,只是检测单独的一张图片.
import cv2
import sys
# Get user supplied values
imagePath = sys.argv[1]
# Create the haar cascade
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") #1
# Read the image
image = cv2.imread(imagePath)#2
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)#3
# Detect faces in the image
faces = faceCascade.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(5,5),flags = cv2.cv.CV_HAAR_SCALE_IMAGE
) #4
print "Found {0} faces!".format(len(faces))#5
for (x, y, w, h) in faces:cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) #6
cv2.imshow("Faces found", image)#7
cv2.waitKey(0) #8
看一下检测效果:
其中python基础的部分就不管了,重点是opencv的使用:
#1中
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
这是初始化opencv的Cascade Classification,详情可参见Cascade Classification , 它的作用就是产生一个检测器,检测的依据全都储存在参数所代表的那个xml文件中,这个xml文件可以在 opencv-github 中获得,官方提供的还有眼睛,树等其他对象的识别数据,这些数据就是一张一张图像训练出来的, 这里 有一篇讲解如何自己训练得到检测数据的.
#2就是读取图像,
#3
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
将读取的图像转换成了 cv2.COLOR_BGR2GRAY格式 ,具体的算法可见:cvtcolor ,为什么要进行转换呢?
其实这里的检测的依据是 哈尔特征 ,转换后每个点的RGB数据变成了一维的灰度,计算的强度减小,其实不转换也是可以的.(就上述图像测试可行)
#4
faces = faceCascade.detectMultiScale(gray,scaleFactor=1.15,minNeighbors=5,minSize=(5,5),flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)
这是这段代码中的核心,这几个参数最终决定能否检测出.关于方法detectMultiScale,可以参见 detectmultiscale
这里只说参数起了什么作用.
gray : 进行检测的图像,这里是转换后的,
scaleFactor : 官网文档说是每次图片缩小的比例,其实可以这么理解,距离相机不同的距离,物体大小是不一样的,在物体大小不一致的情况下识别一个东西是不方便的,这就需要进行多次的缩放,这就是这个参数的作用.
minNeighbors : 可以理解为每次检测时,对检测点(Scale)周边多少有效点同时检测,因为可能选取的检测点大小不足而导致遗漏
minSize : 检测点的最小值,或者说就是检测点的最终值
flags : 这个参数在新版的opencv是不需要的,暂时不管了,注释掉同样可以
#5
输出检测出的人脸的个数,这里的faces的类型是
<type 'numpy.ndarray'>
这个ndarray是一个二维数组,行数是检测出的对象的个数,每行为检测到的矩形区域的坐标(左上,右下)
#6
用矩形做标记,参数分别为图像,矩形的左上坐标,右下坐标,,,其他参数见文档:rectangle
#7
显示标记好的图像,第一个参数指定显示的窗体的标题,第二个参数就是图像的数据,这个数据其实也是
<type 'numpy.ndarray'>
具体函数的讲解见文档:imshow
#8
这个函数决定每帧显示的时长,单位是毫秒,waitKey(0)表示这一帧在你按下任意键前始终显示,waitKey(25)表示每帧显示时长为25毫秒,之后会自动显示下一帧.
至此,这个简短的检测人脸的脚本就结束了
转载于:https://my.oschina.net/chinesezhx/blog/520917
opencv-python学习一--人脸检测相关推荐
- 如何用OpenCV在Python中实现人脸检测
选自towardsdatascience 作者:Maël Fabien 机器之心编译 参与:高璇.张倩.淑婷 本教程将介绍如何使用 OpenCV 和 Dlib 在 Python 中创建和运行人脸检测算 ...
- python 视频人脸替换_Python基于OpenCV实现视频的人脸检测
本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...
- python视频人脸检测_Python基于OpenCV实现视频的人脸检测
本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...
- 基于深度学习的人脸检测和关键点检测推理实践(OpenCV实现,含代码)
目录 一.任务概述 二.环境准备 三.实现步骤 3.1 Python推理 3.2 C++推理 3.2.1 环境准备 3.2.2 推理 3.3 Java推理 一.任务概述 最近项目中大量场景需要用到人脸 ...
- 基于OpenCV的视频处理 - 人脸检测
一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com Time of completion:2023.2.7 Las ...
- 深度学习在人脸检测中的应用 | CSDN 博文精选
作者 | 梁志成.刘鹏.陈方杰 责编 | 唐小引 转载自CSDN(ID:csdnnews) 在目标检测领域,可以划分为人脸检测与通用目标检测,往往人脸这方面会有专门的算法(包括人脸检测.人脸识别.人脸 ...
- 深度学习cnn人脸检测_用于对象检测的深度学习方法:解释了R-CNN
深度学习cnn人脸检测 介绍 (Introduction) CNN's have been extensively used to classify images. But to detect an ...
- 人机交互系统(4.1)——深度学习在人脸检测中的应用
1 人脸检测 在目标检测领域可以划分为了人脸检测与通用目标检测,往往人脸这方面会有专门的算法(包括人脸检测.人脸识别.人脸其他属性的识别等等),并且和通用目标检测(识别)会有一定的差别,着主要来源于人 ...
- Opencv+Python学习记录9:掩膜(掩码)的使用(内附详细代码)
一,基本概念 OpenCV中的很多函数都会指定一个掩模,也被称为掩码,例如: 计算结果=cv2.add(参数1,参数2,掩模) 当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的 ...
- OpenCV实践之路——人脸检测(C++/Python) 【转】
转自:http://blog.csdn.net/xingchenbingbuyu/article/details/51105159 版权声明:本文为博主原创文章,转载请联系作者取得授权. 本文由@星沉 ...
最新文章
- hdu4496并查集的删边操作
- html5--6-59 其他常用CSS属性
- 每日站立会议12/19
- 史上最快的拼接字串方法
- Android Studio出现UnsupportedClassVersionError Unsupported major.minor version 52.0
- netty的Helloworld---netty学习笔记
- 插入箭头_“PPT立体箭头”这样做
- python中的元类_Python中的元类(metaclass)
- java框架之SpringCloud(2)-Rest微服务案例
- centos下安装mysql5.5_CentOS下安装Mysql5.5
- 《分布式系统概念与设计》读书笔记(第零章)
- 100个javaweb实战项目(视频+源码+文档),带你上天!
- TMS320F28335的SPI
- 如何下载专利(国内)
- IMF Is Given Tough Tasks
- 三个遗传算法matlab程序实例
- 《老梁四大名著情商课》笔记- 别慌,情商是可以提升的
- 洛谷 P1093 [NOIP2007 普及组] 奖学金 AC100分
- 河南专升本公共英语语法考点分析---被动语态
- stem教育在中国法则
热门文章
- hdu1274 展开字符串
- [转]出租车中的MBA
- Linux O(1)调度器
- Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树
- 用GParted工具修改Ubuntu系统中/home分区大小
- 使用jrtplib(RTP)传输H.264视频文件
- 3726.调整数组-AcWing题库
- 学生如何免费使用Jetbrains旗下包含Pycharm等开发工具(中文详细教程)
- 快速排序C++方法(3种)
- oracle like 前缀,algorithm – 在ORACLE中搜索最长前缀的最快方法