zoukankan      html  css  js  c++  java
  • python中opencv库的使用之目标检测(二)

     1 #course15.py
     2 import numpy as np
     3 import cv2
     4 
     5 # multiple cascades: https://github.com/Itseez/opencv/tree/master/data/haarcascades
     6 
     7 #https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml
     8 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
     9 #https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_eye.xml
    10 eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
    11 
    12 eyeglasses_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml')
    13 
    14 smile_cascade = cv2.CascadeClassifier('haarcascade_smile.xml')
    15 
    16 cap = cv2.VideoCapture(0)
    17 
    18 while(cap.isOpened()):
    19     ret, img = cap.read()
    20     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    21     faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    22     smile = smile_cascade.detectMultiScale(gray)
    23     for (sm_x,sm_y,sm_w,sm_h) in smile:
    24         cv2.rectangle(gray,(sm_x,sm_y),(sm_x+sm_w,sm_y+sm_h),(0,0,255),2)
    25         
    26     for (x,y,w,h) in faces:
    27         cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    28         roi_gray = gray[y:y+h, x:x+w]
    29         roi_color = img[y:y+h, x:x+w]
    30         eyes = eye_cascade.detectMultiScale(roi_gray)
    31         for (ex,ey,ew,eh) in eyes:
    32             cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
    33             
    34             font = cv2.FONT_HERSHEY_SIMPLEX
    35             cv2.putText(img,'Eye',(ex+x,ey+y), font, 0.5, (11,255,255), 1, cv2.LINE_AA)
    36         #eyeglasses = eyeglasses_cascade.detectMultiScale(roi_gray)
    37         #for (e_gx,e_gy,e_gw,e_gh) in eyeglasses:
    38         #    cv2.rectangle(roi_color,(e_gx,e_gy),(e_gx+e_gw,e_gy+e_gh),(0,0,255),2)
    39             #roi_gray = gray[ey:ey+eh, ex:ex+ew]#
    40             #roi_color = img[ey:ey+eh, ex:ex+ew]#
    41 
    42     cv2.imshow('img',img)
    43     k = cv2.waitKey(30) & 0xff
    44     #print(k)
    45     if k == 27:
    46         break
    47 
    48 cap.release()
    49 cv2.destroyAllWindows()
    50 print(smile)

    搭建的运行平台见本系列的(一),

    以上代码运用的是Haar级联分类器的原理,下面是Haar级联分类器原理的简单介绍:

    Haar分类器是利用图像中目标的类Haar特征来对目标进行检测的,而利用积分图的方法可以加快类Haar特征的值的求解过程。
    一个最基本的类Haar特征就是一个最简陋的弱分类器,而弱分类器优化后称为优化后的弱分类器。
    将多个优化后的弱分类器组合起来便形成了强分类器。(至于如何将若干个优化后的弱分类器组合起来称为强分类器,用的是Adaboost算法,数学原理看了之后不是很懂,作为一个数学系的学生很惭愧。)
    但是单个的强分类器应用在实际的检测中效果并不好,
    于是又有人提出了将若干个强分类器层叠或者称之为级联在一起,
    这样就得到了级联分类器。

    检测效果:(能够利用摄像头捕捉形成视频,对视频中动态的对人脸、人眼进行检测,以下是视频截图)

  • 相关阅读:
    微信小程序 使用async await
    CSS currentColor 变量的使用
    wn.run万能命令
    (13)浮动布局(控制盒模型在页面的什么位置 什么是清浮动)
    (0)前端总结(HTML + CSS + JQ)
    (12)页面的布局(浮动布局)
    (11)盒模型
    (10)背景图片操作
    (9)字体操作
    (8)伪类选择器和鼠标悬停动画效果
  • 原文地址:https://www.cnblogs.com/zengqingfu1442/p/6964867.html
Copyright © 2011-2022 走看看