1、视频分解为图片
这是我在网上找的两个视频,我把它下载到本地,作为学习使用:
- 小屁猪视频1链接:https://www.ixigua.com/i6788075908059103744
- 小屁猪视频2链接:https://www.ixigua.com/i6754249888495567373
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
扫描二维码关注公众号,回复:
9635371 查看本文章
