python使用opencv提取视频文件,本地电脑摄像机,视频流中的人脸。保存为图片的测试代码
发布日期:2021-07-01 05:36:08 浏览次数:2 分类:技术文章

本文共 4061 字,大约阅读时间需要 13 分钟。

当前使用

系统:Windows 10 64

python 3.7.3

opencv 3.4.4 

python官网:

opencv下载地址:

注意当前使用的异常吹方式:当前帧处理失败时,直接跳过当前帧,继续执行。请根据实际情况进行处理异常。

#-*- coding: UTF-8 -*-!pip install D:/study/tf/03/opencv_python-3.4.4.19-cp37-cp37m-win_amd64.whlimport cv2import pandas as pdfrom PIL import Image# 一个图片截取一张人脸def getface(path, save_path):  cap = cv2.VideoCapture(path)  classfier = cv2.CascadeClassifier("D:/study/tf/03/haarcascade_frontalface_alt2.xml")  suc = cap.isOpened()  # 是否成功打开  frame_count = 0  out_count = 0  while suc:        try:          frame_count += 1          #if out_count > 1000: #最多取出多少张          #  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)) #读取脸部位置 faceRects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (28, 28), flags=cv2.CASCADE_SCALE_IMAGE)          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) #处理面部的大小                    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) #存储到指定目录                    cv2.imwrite(save_path + '%d.jpg' % out_count, img_new, params) #存储到指定目录                    out_count += 1                    print('成功提取'+ name +'的第%d个脸部'%out_count)                    #break #每帧只获取一张脸,删除这个即为读出截取图片的全部面部        except BaseException:            print('exception ... continue')            pass            continue  cap.release()  cv2.destroyAllWindows()  print('总帧数:', frame_count)  print('提取脸部:',out_count)# 一个图片截取多张人脸def getfaceM(path):  cap = cv2.VideoCapture(path)  # classfier = cv2.CascadeClassifier("D:/study/tf/03/haarcascade_frontalface_alt2.xml")  classfier = cv2.CascadeClassifier("D:/study/tf/03/haarcascade_frontalface_default.xml")  suc = cap.isOpened()  # 是否成功打开  frame_count = 0  out_count = 0  while suc:        try:          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 = (28, 28))          #大于0则检测到人脸          if len(faceRects) > 0:                for faceRect in faceRects:  #单独框出每一张人脸 for (x,y,w,h) in rects:                    x, y, w, h = faceRect                    image = frame[y - 10: y + h + 10, x - 10: x + w + 10] # cv2.rectangle(image, (x,y), (x+w,y+h), (0,255,0), 2)                    #转为灰度图                    image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)                    #处理面部的大小,像素大小随其他软件处理设置                    img_new = cv2.resize(image,(30,30), interpolation = cv2.INTER_CUBIC)                    cv2.imwrite('D:/tmp/aa/img/%d.jpg' % out_count, img_new, params) #保存图片                    out_count += 1                    print('成功提取'+ name +'的第%d个脸部'%out_count)                    break #每帧只获取一张脸,删除这个即为读出全部面部        except BaseException:            print('exception ... continue')            pass            continue  cap.release()  cv2.destroyAllWindows()  print('总帧数:', frame_count)  print('提取脸部数量:',out_count)    file_name = 'c' # a b c 0 # 0为本电脑摄像头 rtsp:@1/hks   if __name__ == '__main__':    print(cv2.__version__)    print("D:/tmp/aa/"+ file_name +".mp4", 'D:/tmp/aa/img/')    getface("D:/tmp/aa/"+ file_name +".mp4", 'D:/tmp/aa/img/') #参数为视频地址    #getfaceM("D:/tmp/aa/"+ file_name +".mp4", 'D:/tmp/aa/img/') #参数为视频地址

 

转载地址:https://openai.blog.csdn.net/article/details/100214158 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python+opencv提取图片中的人脸
下一篇:centos7 桌面版安装 pip

发表评论

最新留言

很好
[***.229.124.182]2024年04月29日 08时41分40秒