经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python基于OpenCV实现人脸检测并保存
来源:jb51  时间:2019/7/23 13:14:24  对本文有异议

本文实例为大家分享了Python基于OpenCV实现人脸检测,并保存的具体代码,供大家参考,具体内容如下

安装opencv

如果安装了pip的话,Opencv的在windows的安装可以直接通过cmd命令pip install opencv-python(只需要主要模块),也可以输入命令pip install opencv-contrib-python(如果需要main模块和contrib模块)
详情可以点击此处

导入opencv

  1. import cv2

所有包都包含haarcascade文件。这个文件很重要!!!
cv2.data.haarcascades可以用作数据文件夹的快捷方式。例如:

  1. cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

代码

  1. #-*- coding: utf-8 -*-
  2. # import openCV的库
  3. import cv2
  4. import os, math, operator
  5. from PIL import Image
  6. from functools import reduce
  7.  
  8.  
  9. ###调用电脑摄像头检测人脸并截图
  10.  
  11. def CatchPICFromVideo(window_name, path_name):
  12. cv2.namedWindow(window_name)
  13.  
  14. #电脑摄像头
  15. cap = cv2.VideoCapture(0)
  16.  
  17. #告诉OpenCV使用人脸识别分类器
  18. classfier = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
  19.  
  20. #检测人脸后要画的边框的颜色
  21. color = (0, 255, 0)
  22.  
  23. while cap.isOpened():
  24. ok, frame = cap.read() #读取一帧数据
  25. if not ok:
  26. break
  27.  
  28. grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #将当前桢图像转换成灰度图像
  29.  
  30. #人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
  31. faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
  32. if len(faceRects) > 0: #大于0则检测到人脸
  33. for faceRect in faceRects: #单独框出每一张人脸
  34. x, y, w, h = faceRect
  35.  
  36. #画出矩形框
  37. cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)
  38. k = cv2.waitKey(100) #每0.1秒读一次键盘
  39. if k == ord("z") or k == ord("Z"): #如果输入z
  40. #将当前帧保存为图片
  41. img_name = path_name
  42. print(img_name)
  43. image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
  44. cv2.imwrite(img_name, image,[int(cv2.IMWRITE_PNG_COMPRESSION), 9])
  45. break
  46. #显示图像
  47. cv2.imshow(window_name, frame)
  48. #退出摄像头界面
  49. c = cv2.waitKey(100)
  50. if c == ord("q") or c == ord("Q"):
  51. break
  52.  
  53. #释放摄像头并销毁所有窗口
  54. cap.release()
  55. cv2.destroyAllWindows()
  56.  
  57.  
  58. os.system("cls") #清屏
  59. recogname = "recogface.jpg" #预存的人脸文件
  60. CatchPICFromVideo("get face",recogname)

功能:

虽然能框住人脸,但是效率还不是很高。
按Z或z可以将框住的人脸截取保存

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号