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学习一--人脸检测相关推荐

  1. 如何用OpenCV在Python中实现人脸检测

    选自towardsdatascience 作者:Maël Fabien 机器之心编译 参与:高璇.张倩.淑婷 本教程将介绍如何使用 OpenCV 和 Dlib 在 Python 中创建和运行人脸检测算 ...

  2. python 视频人脸替换_Python基于OpenCV实现视频的人脸检测

    本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...

  3. python视频人脸检测_Python基于OpenCV实现视频的人脸检测

    本文实例为大家分享了基于OpenCV实现视频的人脸检测具体代码,供大家参考,具体内容如下 前提条件 1.摄像头 2.已安装Python和OpenCV3 代码 import cv2 import sys ...

  4. 基于深度学习的人脸检测和关键点检测推理实践(OpenCV实现,含代码)

    目录 一.任务概述 二.环境准备 三.实现步骤 3.1 Python推理 3.2 C++推理 3.2.1 环境准备 3.2.2 推理 3.3 Java推理 一.任务概述 最近项目中大量场景需要用到人脸 ...

  5. 基于OpenCV的视频处理 - 人脸检测

    一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055@qq.com  Time of completion:2023.2.7 Las ...

  6. 深度学习在人脸检测中的应用 | CSDN 博文精选

    作者 | 梁志成.刘鹏.陈方杰 责编 | 唐小引 转载自CSDN(ID:csdnnews) 在目标检测领域,可以划分为人脸检测与通用目标检测,往往人脸这方面会有专门的算法(包括人脸检测.人脸识别.人脸 ...

  7. 深度学习cnn人脸检测_用于对象检测的深度学习方法:解释了R-CNN

    深度学习cnn人脸检测 介绍 (Introduction) CNN's have been extensively used to classify images. But to detect an ...

  8. 人机交互系统(4.1)——深度学习在人脸检测中的应用

    1 人脸检测 在目标检测领域可以划分为了人脸检测与通用目标检测,往往人脸这方面会有专门的算法(包括人脸检测.人脸识别.人脸其他属性的识别等等),并且和通用目标检测(识别)会有一定的差别,着主要来源于人 ...

  9. Opencv+Python学习记录9:掩膜(掩码)的使用(内附详细代码)

    一,基本概念 OpenCV中的很多函数都会指定一个掩模,也被称为掩码,例如: 计算结果=cv2.add(参数1,参数2,掩模) 当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的 ...

  10. OpenCV实践之路——人脸检测(C++/Python) 【转】

    转自:http://blog.csdn.net/xingchenbingbuyu/article/details/51105159 版权声明:本文为博主原创文章,转载请联系作者取得授权. 本文由@星沉 ...

最新文章

  1. hdu4496并查集的删边操作
  2. html5--6-59 其他常用CSS属性
  3. 每日站立会议12/19
  4. 史上最快的拼接字串方法
  5. Android Studio出现UnsupportedClassVersionError Unsupported major.minor version 52.0
  6. netty的Helloworld---netty学习笔记
  7. 插入箭头_“PPT立体箭头”这样做
  8. python中的元类_Python中的元类(metaclass)
  9. java框架之SpringCloud(2)-Rest微服务案例
  10. centos下安装mysql5.5_CentOS下安装Mysql5.5
  11. 《分布式系统概念与设计》读书笔记(第零章)
  12. 100个javaweb实战项目(视频+源码+文档),带你上天!
  13. TMS320F28335的SPI
  14. 如何下载专利(国内)
  15. IMF Is Given Tough Tasks
  16. 三个遗传算法matlab程序实例
  17. 《老梁四大名著情商课》笔记- 别慌,情商是可以提升的
  18. 洛谷 P1093 [NOIP2007 普及组] 奖学金 AC100分
  19. 河南专升本公共英语语法考点分析---被动语态
  20. stem教育在中国法则

热门文章

  1. hdu1274 展开字符串
  2. [转]出租车中的MBA
  3. Linux O(1)调度器
  4. Internet路由之路由表查找算法概述-哈希/LC-Trie树/256-way-mtrie树
  5. 用GParted工具修改Ubuntu系统中/home分区大小
  6. 使用jrtplib(RTP)传输H.264视频文件
  7. 3726.调整数组-AcWing题库
  8. 学生如何免费使用Jetbrains旗下包含Pycharm等开发工具(中文详细教程)
  9. 快速排序C++方法(3种)
  10. oracle like 前缀,algorithm – 在ORACLE中搜索最长前缀的最快方法