图像处理之视频分解合成及Haar+Adaboost人脸识别

1、视频分解为图片

这是我在网上找的两个视频,我把它下载到本地,作为学习使用:

import cv2
cap = cv2.VideoCapture('xiaopizhu1.mp4')#获取一个视频打开
isOpened = cap.isOpened#判断是否打开
print (isOpened)
fps = cap.get(cv2.CAP_PROP_FPS)#帧率
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print ("该视频的帧率=%s; 宽度=%s; 高度=%s"%(fps, width, height))
i = 0
while(isOpened):
    if i == 10:
        break
    else:
        i = i + 1
    flag, frame = cap.read() #读取每张图片: flag为true和false; frame为图片信息
    fileName = './images/image%s.jpg'%i
    #frame = cv2.resize(frame, (1080,1920))#强行转化图片宽高
    print (fileName)
    if flag == True:
        cv2.imwrite(fileName, frame, [cv2.IMWRITE_JPEG_LUMA_QUALITY, 100])#像素值为0~100
print ("保存完成!")

运行结果:

<built-in method isOpened of cv2.VideoCapture object at 0x000002225ECF6830>
该视频的帧率=30.0; 宽度=1080; 高度=1920
./images/image1.jpg
./images/image2.jpg
./images/image3.jpg
./images/image4.jpg
./images/image5.jpg
./images/image6.jpg
./images/image7.jpg
./images/image8.jpg
./images/image9.jpg
./images/image10.jpg
保存完成!

保存图片:
在这里插入图片描述


2、图片合并为视频

  • cv2.VideoWriter()方法
  • 参数: 1、文件名; 2、编码器; 3、帧率; 4、大小
  • 注意:合并完成后需要释放资源视频才能正常播放
import cv2
img = cv2.imread('./images/image1.jpg')
imgInfo = img.shape
size = (imgInfo[1], imgInfo[0]) #获取图片的宽高
print ("图片的宽高为:",size)
# 定义保存图片的格式,写入对象
# 参数: 1、文件名; 2、编码器; 3、帧率; 4、大小
videoWrite = cv2.VideoWriter('images/New_Video1.mp4', -1, 5, size)#每秒5张图片
for i in range(1,11):
    fileName = 'images/image%s.jpg'%i
    print (fileName)
    img = cv2.imread(fileName, 1)
    videoWrite.write(img)#写入方法
print ("合并完成!")
#释放资源 
videoWrite.release()

运行结果:

图片的宽高为: (1080, 1920)
images/image1.jpg
images/image2.jpg
images/image3.jpg
images/image4.jpg
images/image5.jpg
images/image6.jpg
images/image7.jpg
images/image8.jpg
images/image9.jpg
images/image10.jpg
合并完成!

保存视频:

  • 共10张图片组成,每秒播放5张,一共2秒。
    在这里插入图片描述

3、基于Haar + Adaboost人脸识别

1、什么是haad特征?
	● 像素值通过运算得到的结果;可能值(具体值,向量,矩阵,多维)
2、如何利用特征区分目标?
	● 与之判决:如果这个特征大于某个阈值,就可以认为是目标
3、如何得到判决?
	● 通过机器学习得到判决明显,再进行阈值判决

人脸和眼睛识别算法: https://github.com/opencv/opencv/tree/master/data/haarcascades
下载:haarcascade_eye.xml 和 haarcascade_frontalface_default.xml

玩伴女郎雷娜(Lena Söderberg)图片下载: https://www.ece.rice.edu/~wakin/images/

  • 流程: 1、加载xml识别算法; 2、加载图片; 3、图片灰度处理; 4、算法检测; 5、画出人脸
import cv2
import numpy as np

# 1、load xml 参数:fileName
face_xml = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_xml = cv2.CascadeClassifier('haarcascade_eye.xml')

# 2、load pictrue
img = cv2.imread('lena512color.tiff', 1)
cv2.imshow('Lena',img)

#haar gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# detect faces 参数:1、gray_data;2、扩散值; 3、临近值
faces = face_xml.detectMultiScale(gray, 1.3, 5)
print ("face=",len(faces))

#draw face+eyes
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255,0,0), 2)#线条宽度为2
    roi_face = gray[y:y+h, x:x+w]#人脸范围
    roi_color = img[y:y+h, x:x+w]#截取图片
    # detect eyes
    eyes = eye_xml.detectMultiScale(roi_face)
    print ("eye=",len(eyes))
    for (e_x, e_y, e_w, e_h) in eyes:
        cv2.rectangle(roi_color, (e_x, e_y), (e_x+e_w, e_y+e_h), (0,255,0), 2)

# 图片展示并释放资源
cv2.imshow('dst',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

face= 1
eye= 2

在这里插入图片描述

发布了84 篇原创文章 · 获赞 64 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ayouleyang/article/details/104133127