更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer
作者:刘潇龙
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可以用下面两种方法:
官网下载并安装OpenCV之后,在目录\opencv\build\python\2.7\x64之下有一个cv2.pyd文件,把它拷贝到python安装目录下的\Lib\site-packages
文件夹下面即可。需要注意的是版本要对应,比如这里就要对应64位的Python2.7。而且目前官方自带的只有Python2.7版本的包。如果想要其他版本怎么办?
那就要说到一个神奇的网站了:Unofficial Windows Binaries for Python Extension Packages,这里面包含了几乎所有的能用到的Python库的安装包,比如我们需要的OpenCV,这里可以找到下面这么多版本,可以适应不同的需求,还有编译的contrib版本的,简直是惊喜。
按照自己的环境下载相应的版本,然后还是用pip安装,命令如下:
pip install *.whl
请把星号换成对应的名字。
我这里用的是Python3.6包含contrib的64位的包。
猫脸检测
喵星人真的是要统治世界了。不然为什么OpenCV自带的检测器中除了人脸检测、行人检测这些意料之中就应该存在的检测器之外,还悄悄多出了猫脸检测器呢。
今天我们就来试一下这个猫脸检测到底 是什么样的?基于OpenCV的猫脸检测十分简单。用Python的话只有区区20行代码。其中20行代码中发挥主要作用的只有一个函数:
detectMultiScale()
此函数的作用是,在输入图像中检测不同尺寸的对象,返回包含对象的矩形框。它接收的参数:
1.image——输入图像
2.scaleFactor——表示每轮检测图像齿轮减少的比例
3.minNeighbors——指明对象要至少被检测到几次才能判定对象确实存在
4.minSize——检测对象的最小尺寸
5.maxSize——检测对象的最大尺寸
代码
按照惯例,注释齐全,无需多说。
效果
运行Python脚本后效果如下:
举一反三
本文虽然只是在说猫脸检测,但是在OpenCV下,人脸检测、行人检测、人眼检测等都是同样的道理,同样的流程。只需要把最开始相应的检测器换掉,然后按照实际情况调节
detectMultiScale()
的参数即可。比如以下是人脸检测的效果:
领取专属 10元无门槛券
私享最新 技术干货