OpenCV检测篇(一)——猫脸检测

腾讯云技术社区-掘金主页持续为你们呈现云计算技术文章,欢迎你们关注!python


做者:刘潇龙算法

OpenCV

OpenCV是时下最流行的基于C++的开源计算机视觉库,它功能丰富,函数众多,从最基本的读写图片,到简单的图像处理(好比降噪滤波、边缘检测、图像变换、特征提取等),再到更加高级的行人检测、人脸识别、文本识别等,尽皆包含。在OpenCV提供的函数的基础上,咱们能够很方便地开发本身的应用,实现本身的算法。总的来讲,就是OpenCV很是强大。具体有多强大?那得用了才知道。函数

不少要作人脸识别,要用到SIFT特征的人都问过的一个问题是,为何配置好opencv以后,却找不到人脸识别的头文件,找不到SIFT在哪?这是由于OpenCV3.0以后,把一些还在最新的,但不是很稳定的,还在测试阶段的东西放在了contrib模块里面。并且官方默认不带contrib模块。不幸的是,咱们最想用的人脸识别和SIFT特征都在contrib里面。若是须要用的话,那就须要本身编译了。opencv在Visual Studio上的配置和编译contrib的方法能够参考我以前的博客。今天的内容仍然是用Python语言,最近用Python用着比较顺手。测试

OpenCV的Python环境配置

显然,跟众多基于C++的库同样, OpenCV也是有Python接口的。Python下配置OpenCV能够用下面两种方法:网站

  1. 官网下载并安装OpenCV以后,在目录\opencv\build\python\2.7\x64之下有一个cv2.pyd文件,把它拷贝到python安装目录下的\Lib\site-packages文件夹下面便可。须要注意的是版本要对应,好比这里就要对应64位的Python2.7。并且目前官方自带的只有Python2.7版本的包。若是想要其余版本怎么办?ui

  2. 那就要说到一个神奇的网站了:Unofficial Windows Binaries for Python Extension Packages,这里面包含了几乎全部的能用到的Python库的安装包,好比咱们须要的OpenCV,这里能够找到下面这么多版本,能够适应不一样的需求,还有编译的contrib版本的,简直是惊喜。云计算

按照本身的环境下载相应的版本,而后仍是用pip安装,命令以下:spa

pip install *.whlcode

请把星号换成对应的名字。xml

我这里用的是Python3.6包含contrib的64位的包。

猫脸检测

喵星人真的是要统治世界了。否则为何OpenCV自带的检测器中除了人脸检测、行人检测这些意料之中就应该存在的检测器以外,还悄悄多出了猫脸检测器呢。

今天咱们就来试一下这个猫脸检测到底 是什么样的?基于OpenCV的猫脸检测十分简单。用Python的话只有区区20行代码。其中20行代码中发挥主要做用的只有一个函数:

detectMultiScale()

此函数的做用是,在输入图像中检测不一样尺寸的对象,返回包含对象的矩形框。它接收的参数:

1.image——输入图像

2.scaleFactor——表示每轮检测图像齿轮减小的比例

3.minNeighbors——指明对象要至少被检测到几回才能断定对象确实存在

4.minSize——检测对象的最小尺寸

5.maxSize——检测对象的最大尺寸

代码

按照惯例,注释齐全,无需多说。

# -*- coding=utf-8 -*-
import cv2
# 加载猫脸检测器
catPath = "haarcascade_frontalcatface.xml"
faceCascade = cv2.CascadeClassifier(catPath)
# 读取图片并灰度化
img = cv2.imread("cat1.jpg")  
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 猫脸检测
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor= 1.02,
    minNeighbors=3,
    minSize=(150, 150),
    flags=cv2.CASCADE_SCALE_IMAGE
)
# 框出猫脸并加上文字说明
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
    cv2.putText(img,'Cat',(x,y-7), 3, 1.2, (0, 255, 0), 2, cv2.LINE_AA)
# 显示图片并保存
cv2.imshow('Cat?', img)
cv2.imwrite("cat.jpg",img)
c = cv2.waitKey(0)复制代码

效果

运行Python脚本后效果以下:

触类旁通

本文虽然只是在说猫脸检测,可是在OpenCV下,人脸检测、行人检测、人眼检测等都是一样的道理,一样的流程。只须要把最开始相应的检测器换掉,而后按照实际状况调节detectMultiScale()的参数便可。好比如下是人脸检测的效果:

相关阅读

OpenCV检测篇(二)——笑脸检测
超级无敌鉴黄师-万象优图


此文已由做者受权腾讯云技术社区发布,转载请注明文章出处;获取更多云计算技术干货,可请前往腾讯云技术社区

相关文章
相关标签/搜索