OpenCV是如今最流行的计算机视觉库,而我们今天就是要学习如何安装使用OpenCV,以及如何去访问我们的摄像头。然后我们一起来看看写一个人脸检测程序是如何地简单,简单到只需要几行代码。

在开始之前,我假设你已经对Python有一定的了解。当然,如果你觉得你还不够格,这里有推荐一些学习Python的电子书,你可以先学习下Python,如此可以让你更好地理解接下来的步骤。另外,这里还推荐一本电子书来学习OpenCV。

好,不浪费时间,开始吧。

To setup opencv in python environment you will need these things ready ( match the versions to follow along with this tutorial),
首先我们需要先准备好这些环境(版本记得配好):

  • Python 2.x
  • OpenCV 3 (2也行,同理
  • Numpy库 (这个可以在稍后用pip下载)

首先,对于下载Python,我们可以先到官网上下对应的版本,如果是Windows就可能是msi格式的版本,如果是Mac就可能是pkg格式的安装包,如果是Linux则可能是源码包。

安装和Python后打开命令行就可以使用pip命令进行Python包的安装了,如:

由于OpenCV使用Numpy库,因此先通过命令pip install numpy安装Numpy库。安装完后,尝试导入,没有报错则ok:

然后进入OpenCV官网下对应的版本并安装,尝试导入:

尝试人脸检测

万事俱备,只欠东风。我们来写代码检测人脸吧,来一发OpenCV的Hello world。

在这里我们准备使用pre-trained的XML文件,这些XML文件都较难训练,但是我们不需要担心,因此OpenCV已经为我们提供了很多人脸检测相关的pre-trained分类器。

想要使用这写分类器,我们需要将分类器的XML文件haarcascade_frontalface_default.xmlopencv文件夹/sources/data/haarcascades/下复制到我们的项目目录下,就是我们将要写程序的目录下。如果没有opencv文件夹/sources/data/haarcascades/这个目录,可以尝试找一下opencv文件夹/share/OpenCV/haarcascades/。只要找到如下文件即可:

然后如果我们要加载这个分类器的话,如此就好:

detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

然后接下来我们先来测试一下摄像头吧,

cap = cv2.VideoCapture(0)
ret, img = cap.read()
cv2.imshow('windowname', img)
cv2.waitKey(0) # 释放摄像头资源
cap.release()

以上的代码是调用你电脑的0号摄像头,并展示出来。当然,如果你有多个摄像头,那么你也可以试试别的id,修改VideoCapture函数的参数即可。

其中cap.read()就是从摄像头获取到图像,这个函数返回了两个变量,第一个为布尔值表示成功与否,以及第二个是图像。

然后程序通过imshow()展示图片,其第一个传入的参数为窗口的名称,而第二个就是要展示的图片,以上代码传入的就是我们的自拍。

而waitKey是用来停在图片的展示界面,让你看清楚,参数可以是10、100、1000等,单位是毫秒,这里填0就是一直停着。注意了,如果停留的时间不够久,就可能看不见imshow的照片了。

运行了这段代码,你将会看到摄像头所拍摄的画面,一般来说就是你自己了。

接下来我们将图片先转换为灰度图片,

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

然后就开始了人脸检测之旅:

faces = detector.detectMultiScale(gray, 1.3, 5)

以上的这句代码会等到一串list,list中的每个都有x, y, height, width四个变量。其中list表示检测到的人脸,即list的size就是人脸的个数,而每个人脸在图片中的位置是(x, y, height, width)。

为了能让我们更直观地看出来检测结果,我们将这些人脸框出来:

for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

更进一步

现在我们已经通过摄像头检测到人脸了,但是我们真正需要的是不是一张静态的图片,我们需要的是一个能检测的实时动态视频流。因此我们加一个循环,然后不断的检测,最终在显示在新窗口中。

detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0) while True:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = detector.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.imshow('frame', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break cap.release()
cv2.destroyAllWindows()

需要注意的是,结尾用了waitKey和ord实现了按q退出的功能,就是每一毫秒都在检测键盘有没有按下了q,要是按下了就退出循环了。接下来就释放资源。

总结厦门叉车租赁

在本文中,我们学习了如何使用Python中的OpenCV,即通过代码写了一个人脸检测的程序。我们温习或学习了这些知识点:

  • 使用OpenCV的分类器
  • 从摄像头中读取照片
  • 在图片上换框框
  • 在新窗口上展示图片
  • 实时地进行人脸检测

P.S. 你们发现了XML那里有一个叫猫脸识别的文件吗!!!

OpenCV-Python(1)在Python中使用OpenCV进行人脸检测的更多相关文章

  1. 利用opencv自带源码,调试摄像头做人脸检测

    本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring 和 http://www.cnblogs.com/xujianqing/ 作者: ...

  2. Dlib库中实现正脸人脸检测的测试代码

    Dlib库中提供了正脸人脸检测的接口,这里参考dlib/examples/face_detection_ex.cpp中的代码,通过调用Dlib中的接口,实现正脸人脸检测的测试代码,测试代码如下: #i ...

  3. openCV(二)---iOS中使用openCV的图片格式转换

    可以实现将UIImage和IplImage类型实现相互转换 //由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构. - (IplImage *)C ...

  4. 在MacOS和iOS系统中使用OpenCV

    在MacOS和iOS系统中使用OpenCV 前言 OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在 MacOS 和 iOS 上使用 OpenCV ...

  5. [转]在MacOS和iOS系统中使用OpenCV

    OpenCV 是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. 最近试着在MacOS和iOS上使用OpenCV,发现网上关于在MacOS和iOS上搭建OpenCV的资料很 ...

  6. Android 中使用 dlib+opencv 实现动态人脸检测

    1 概述 完成 Android 相机预览功能以后,在此基础上我使用 dlib 与 opencv 库做了一个关于人脸检测的 demo.该 demo 在相机预览过程中对人脸进行实时检测,并将检测到的人脸用 ...

  7. Python 3 利用 Dlib 19.7 实现摄像头人脸识别

    0.引言 利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的: 可以自动从摄像头中抠取人脸图片存储到本地: 根据抠取的 ...

  8. OpenCV&Qt学习之四——OpenCV 实现人脸检测与相关知识整理

    开发配置 OpenCV的例程中已经带有了人脸检测的例程,位置在:OpenCV\samples\facedetect.cpp文件,OpenCV的安装与这个例子的测试可以参考我之前的博文Linux 下编译 ...

  9. cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测

    参考文献----------OpenCV-Python-Toturial-中文版.pdf 参考博客----------http://www.bubuko.com/infodetail-2498014. ...

随机推荐

  1. java中判断图片格式并且等比例压缩图片

    最近项目中需要判断上传的图片必须是png,jpg,gif三种格式的图片,并且当图片的宽度大于600px时,压缩图片至600px,并且等比例的压缩图片的高度. 具体的实现形式: 大致的思路是: 判断根据 ...

  2. STL容器与拷贝构造函数

    所有容器提供的都是“value语意”而非“reference语意”.容器内进行元素的安插操作时,内部实施的是拷贝操作,置于容器内.因此STL容器 的每一个元素都必须能够拷贝.---<<C+ ...

  3. 提取win10默认锁屏壁纸

    win10锁屏设置为windows聚焦时锁屏会有好看的图片出现.想让一张好看的图片一直使用,就去提取出来然后设置一下. 找到C盘:用户目录下 找到你的主机名文件夹: 在查看的选项栏中将隐藏文件夹显示: ...

  4. #leetcode刷题之路39-组合总和

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合.candidates 中的数字可以无限制重复被选取 ...

  5. MySQL学习之备份

    MySQL数据库备份与还原 数据库备份也叫SQL数据备份,备份的结果都是SQL指令. 在MySQL中专门提供了一个用于数据库备份的SQL客户端:mysqldump.exe(MySql document ...

  6. php生成带自定义logo和带二维码跳转自定义地址的二维码

    index.php<?phpheader('Content-type:text/html;charset=UTF-8');// 指定允许其他域名访问header('Access-Control- ...

  7. [控件] Firemonkey 跨平台 Toast

    控件说明:一个简单的讯息提示功能,使用 FMX 基本控件,因此支持 Win, macOS, iOS, Android 平台. 已知问题:如果使用了 WebBrowser, MapView... 等原生 ...

  8. Windows 视频Directshow开发介绍

    在Windows平台上实现一个文件播放器有什么好的开发库和方案呢?方案有很多,比如基于FFmpeg,VLC的插件,mplayer,Directshow.用FFmpeg来实现文件格式解析.分离视频音频流 ...

  9. 调试大叔V2.1.0(2018.12.17)|http/s接口调试、数据分析程序员辅助开发神器

    2018.12.17 - 调试大叔 V2.1.0*升级http通讯协议版本,完美解决Set-Cookie引起的系列问题:*新增Content-Type编码格式参数,支持保存(解决模拟不同网站或手机请求 ...

  10. CTF-i春秋网鼎杯第四场部分writeup

    CTF-i春秋网鼎杯第四场部分writeup 因为我们组的比赛是在第四场,所以前两次都是群里扔过来几道题然后做,也不知道什么原因第三场的题目没人发,所以就没做,昨天打了第四场,简直是被虐着打. she ...