zoukankan      html  css  js  c++  java
  • [Python]Python基于OpenCV批量提取视频中的人脸并保存

    最近在写我们数组图像处理课程的人脸识别作业,需要大量的人脸数据。

    而一个一个的照也很麻烦,所以就写了这样一个程序(借鉴了网上已有的视频读帧),我们提前录制好视频

    然后程序逐帧读取,然后分割出其中的人脸,转换为指定大小并转为灰度图

    效率很不错,一个几十秒的视频就能提取出几百张脸部数据(缺点就是这些脸很相似)

    #-*- coding: UTF-8 -*-
    import cv2
    from PIL import Image
    name = 'name'
    def getface(path):
      cap = cv2.VideoCapture(path)
      classfier = cv2.CascadeClassifier("/home/coding/workspace/haarcascades/haarcascade_frontalface_alt2.xml")
      suc = cap.isOpened()  # 是否成功打开
      frame_count = 0
      out_count = 0
      while suc:
          frame_count += 1
          if out_count > 599: #最多取出多少张
            break
          suc, frame = cap.read() #读取一帧
          params = []
          params.append(2)  # params.append(1)
          grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  #将当前桢图像转换成灰度图像
          faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32)) #读取脸部位置
          if len(faceRects) > 0:          #大于0则检测到人脸
                for faceRect in faceRects:  #单独框出每一张人脸
                    x, y, w, h = faceRect
                    image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
                    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #转为灰度图
                    img_new = cv2.resize(image,(47,57), interpolation = cv2.INTER_CUBIC) #处理面部的大小
                    cv2.imwrite('/home/coding/workspace/Data/'+ name +'/%d.jpg' % out_count, img_new, params) #存储到指定目录
                    out_count += 1
                    print('成功提取'+ name +'的第%d个脸部'%out_count)
                    break #每帧只获取一张脸,删除这个即为读出全部面部
      cap.release()
      cv2.destroyAllWindows()
      print('总帧数:', frame_count)
      print('提取脸部:',out_count)
    
    if __name__ == '__main__':
        getface("/home/coding/workspace/Data/Videos/"+ name +".mp4") #参数为视频地址
  • 相关阅读:
    第三周作业
    第二周作业
    第一周作业附加
    第三次结构部分作业
    第二次作业
    最后一周作业
    第14,15周作业
    第七周作业
    第六周作业
    第四周作业
  • 原文地址:https://www.cnblogs.com/lee-li/p/10765822.html
Copyright © 2011-2022 走看看