当前位置:   article > 正文

OpenCV调用摄像头 , 人脸检测demo

x ,y ,w, h=face返回值

github博客传送门
csdn博客传送门

环境:

安装OpenCV:
conda install opencv 或
pip install opencv
安装PIL:
conda install pillow
pip install pillow

效果:

效果图

所需文件:

所需文件
下载链接: 所需文件下载链接
本来是想不收积分的 , 不知道为什么不能选择 0 积分了. 特此我将xml文件的内容贴在本文的最下方 .

代码

  1. import cv2
  2. import numpy as np
  3. cv2.namedWindow("test") # 打卡一个窗口 标题为 test
  4. cap = cv2.VideoCapture(0) # 打开笔记本的内置摄像头,0为计算机默认的摄像头
  5. # cap = cv2.VideoCapture("test.mp4") #导入视频文件进行检测
  6. success, frame = cap.read() # 返回true/Flase,和当前截取的这一帧的图片,三维矩阵,(成功截取返回ture)
  7. classifier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") # 产生一个检测器,检测的依据全都储存在参数所代表的那个xml文件中
  8. while success:
  9. success, frame = cap.read() # 再次读取视频文件
  10. size = frame.shape[:2] # 图片是三维矩阵,要获取图片的长和宽,必须的知道图片的shape,一张图片的shape为[H,W,C],取前两个即得到图片的宽高
  11. image = np.zeros(size, dtype=np.float16) # 生成了一个 类型为 float16的 0 矩阵
  12. image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 对读取出来的图片进行颜色空间转换,转换成灰度图
  13. cv2.equalizeHist(image, image) # 灰度图片直方图均衡化(只接受灰度图)
  14. divisor = 8 # 限制得到目标区域大小和原始图片大小的比例,即最小的检测框为整张图片的八分之一大
  15. h, w = size # 获取每一帧图片的高/宽
  16. minSize = (w // divisor, h // divisor) # 最小的检测框为整张图片的八分之一大
  17. faceRects = classifier.detectMultiScale(image, 1.2, 2, cv2.CASCADE_SCALE_IMAGE, minSize)
  18. # 这是一个人脸检测的函数,image为待检测图片,一般为灰度图像加快检测速度,1.2表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%.
  19. # 2表示构成检测目标的相邻矩形的最小个数(默认为3个)。。 这些都是官方给出的。这些参数自己调整以达到自己想要的效果
  20. # 返回值为框住的人脸的坐标(左上角X坐标,左上角Y坐标,框的宽,高)
  21. if len(faceRects) > 0:
  22. for faceRect in faceRects: # 遍历所得的所有人脸的坐标
  23. x, y, w, h = faceRect # 返回左上角X坐标,左上角Y坐标,框的宽,高
  24. cv2.rectangle(frame, (x, y), (x + h, y + w), (0, 255, 0), 2) # 在未做灰度处理前的图片上画矩形框,frame为图片,(x, y)为左上角X,Y坐标,
  25. # (x + h, y + w)为右下角XY坐标,(0, 255, 0)表示红色,2表示画矩形的线宽为2
  26. # # 这里的眼睛嘴巴的坐标是根据人脸框来确定的,所以这里算了下眼睛和嘴巴的大致位子。位置的计算方式不必过分深究。
  27. # cv2.circle(frame, (x + w // 4, y + h // 4 + 30), min(w // 8, h // 8), (255, 0, 0)) # 左眼 参数1为图片,参数2为圆圈中心点坐标,参数3为半径,参数4为颜色
  28. # cv2.circle(frame, (x + 3 * w // 4, y + h // 4 + 30), min(w // 8, h // 8), (255, 0, 0)) # 右眼 同上
  29. # cv2.rectangle(frame, (x + 3 * w // 8, y + 3 * h // 4), (x + 5 * w // 8, y + 7 * h // 8), (255, 0, 0)) # 嘴巴 参数1图片,参数2左上角坐标,参数3右下脚坐标,参数4颜色
  30. cv2.imshow("test", frame) # 把每一帧的图show 出来
  31. key = cv2.waitKey(10) # 不断刷新图像,10ms刷新一下,返回一个数字,数字代表的意思不知道
  32. c = chr(key & 255) # 把数字转换成字符串
  33. if c in ['q', 'Q', chr(27)]: # 如果C在这个列表的三个中就break
  34. break
  35. cv2.destroyWindow('test') # 关闭所有窗口

xml文件名: haarcascade_frontalface_default.xml

xml文件内容:

发不了这么长的文章 大家去我的csdn下载吧.

转载于:https://www.cnblogs.com/Mrzhang3389/p/10160624.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/819608
推荐阅读
相关标签
  

闽ICP备14008679号