目录
一、音视频处理软件ffmpeg
(一)软件介绍
(二)常用工具及命令
1、ffplay
2、ffmpeg主程序
(三)课上案例实操-将多张图片转为视频
1、图片准备,将视频切割为图片
2、运行ffmpeg程序
(四)自学拓展
利用软件为视频添加模糊效果
二、图片处理-PIL
(一)常用功能
1、为图片添加标题
2、将图片转为灰度图
3、图像模糊处理
4、选取图像局部旋转、粘贴
5、查看直方图
(二)自学函数
1、图像融合
2、调整图片亮度
三、拓展——图像处理与人脸识别结合
一、音视频处理软件ffmpeg
(一)软件介绍
FFmpeg:Fast Forward Moving Picture Experts Group
ffmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含libavcodec(用于多个项目中音频和视频的解码器库),以及libavformat(音频与视频格式转换库)等。
(二)常用工具及命令
1、ffplay
ffplay 是用于播放媒体文件的工具,常用命令有:
ffplay+“同目录下的音视频文件名”
#播放原始音频/视频数据
ffplay -i 视频文件名 -vf setpts=PTS/5
#调整视频的播放速率为五倍
ffplay -i 音频文件名 -af atempo=2
#调整音频的播放速率为两倍
……
2、ffmpeg主程序
常用命令有:
ffmpeg –i input.mp4 –r fps output.mp4
#设置帧率,用 -r 参数设置帧率
ffmpeg -i input_file -s 320x240 output_file
#调整视频分辨率,用-s参数设置视频分辨率,参数值wxh,w宽度单位是像素,h高度单位是像素
ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv
#格式转换,i:输入文件;vcodec copy:视频编码处理方式;acodec copy:音频编码处理方式
……
(三)课上案例实操-将多张图片转为视频
1、图片准备,将视频切割为图片
import cv2
import subprocess
#导入第三方库
video_path="ghz.mp4"
#设置视频路径
image_save="./pic"
#设置图片待保存路径,注:需新建名为“pic”的文件夹
cap=cv2.VideoCapture(video_path)
frame_count=cap.get(cv2.CAP_PROP_FRAME_COUNT)
#逐帧裁切视频
for i in range(int(frame_count)):
_,img=cap.read()
cv2.imwrite("./pic/image{}.jpg".format(i),img)
#输出每一帧
此处特别注意,“./pic”为图片的待保存路径,需要自行创建,否则将无法输出图片。
输出结果为:
2、运行ffmpeg程序
首先要将FFmpeg程序与上述pic文件夹放在同一目录下,同时在该目录下运行命令,Windows可尝试在当前文件夹地址栏中输出“cmd”,回车,启动命令提示符。
ffmpeg -f image2 -i ./pic/image%d.jpg -r 24 output.mp4
#将图片转为24帧/秒的视频
输出结果为:
(四)自学拓展
利用软件为视频添加模糊效果
语法:
boxblur=luma_r:luma_p[:chroma_r:chram_p[:alpha_r:alpha_p]]
ffplay -f lavfi -i testsrc -vf boxblur=1:10:4:10
#luma_r和alpha_r半径取值范围是0~min(w,h)/2, chroma_r半径的取值范围是0~min(cw/ch)/2
操作:
ffmpeg -i ghz.mp4 -vf boxblur=1.5:1 out.mp4
运行结果:
二、图片处理-PIL
(一)常用功能
1、为图片添加标题
原图为:
运行下方代码:
from PIL import Image
import matplotlib.pyplot as plt
#引入第三方库
im=Image.open('cuc.jpg')
#读取图片
plt.imshow(im)
plt.title("Communication University of China")
#添加标题
plt.axis('off')
#关闭坐标轴
plt.show()
#显示
结果为:
2、将图片转为灰度图
原图如下:
运行下方代码:
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#导入第三方库
pic=Image.open("ju.jpg").convert("L")
#读取图片,并将图片转化为灰度图
plt.imshow(pic)
plt.title("Girl Picture Processing")
plt.axis("off")
plt.show()
#输出图片
结果为:
3、图像模糊处理
原图如上
运行下方代码:
from PIL import Image
from scipy.ndimage import filters
import matplotlib.pyplot as plt
import numpy as np
#导入第三方库
pic=np.array(Image.open('ju.jpg'))
pic_fliter=filters.gaussian_filter(pic,5)
#设置图片模糊
plt.figure()
plt.imshow(pic)
plt.axis("off")
#导出原图
plt.figure()
plt.imshow(pic_fliter)
plt.axis("off")
plt.show()
#导出处理后图片
结果为:
4、选取图像局部旋转、粘贴
原图如上
运行下方代码:
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
#导入第三方库
pic=Image.open("ju.jpg")
#读取图片
box=(200,400,350,500)
#截取待放大内容 (横坐标,纵坐标,横坐标,纵坐标)
region=pic.crop(box)
region=region.transpose(Image.ROTATE_180)
#旋转截取内容
pic.paste(region,box)
#粘贴截取内容
plt.imshow(pic)
plt.title("Picture Processing")
#plt.axis("off")
plt.show()
#输出图片
结果为:
5、查看直方图
运行代码如下:
from PIL import Image
from pylab import *
import matplotlib.pyplot as plt
#引入第三方库
img=array(Image.open('cuc.jpg').convert('L'))
#载入图片并进行灰度处理
hist(img.flatten(),32)
#分析图片直方图
plt.figure("Image")
plt.imshow(img)
plt.axis('off')
plt.show()
#输出图片
结果如下:
(二)自学函数
1、图像融合
利用PIL中的composite函数,以mask图像为透明度,对给定的两张图像进行融合。变量mask图像的模式可以为“1”,“L”或者“RGBA”。
注:两张图片的尺寸应相同。
代码如下:
from PIL import Image
#引入第三方库
im1 = Image.open("renxiang1.jpg")
im2 = Image.open("renxiang2.jpg")
#载入待处理图片
r,g,b = im1.split()
#分离出r,g,b
print(b.mode)
print(im1.mode,im1.size)
print(im2.mode,im2.size)
#输出相关信息,检验图片尺寸是否一致
im = Image.composite(im1,im2,b)
im.show()
#显示图片
结果为:
2、调整图片亮度
利用PIL中的eval函数,调整图片亮度。具体函数为Image.eval(image,function),其中,变量function对应的函数处理变量image所代表图像中的每一个像素点。如果变量image所代表图像有多个通道,那变量function对应的函数作用于每一个通道。
注:变量function对每个像素只处理一次,所以不能使用随机组件和其他生成器。
代码如下:
from PIL import Image
#导入第三方库
im = Image.open("renxiang2.jpg")
#载入图片
def fun01(x):
return x*0.5
def fun02(y):
return y*2.0
#定义function参数
im1_eval = Image.eval(im, fun01)
im2_eval = Image.eval(im, fun02)
#对图像进行处理
im1_eval.show()
im2_eval.show()
#分别输出两种参数下的处理结果
结果为:
三、拓展——图像处理与人脸识别结合
利用face-recognition对人脸进行数据分析,再使用PIL中的fromarray函数对图片数据实现array到image的转换,并绘制人脸特征。
代码如下:
from PIL import Image, ImageDraw
import face_recognition
#引入第三方库
image = face_recognition.load_image_file("ju1.jpg")
#将jpg文件加载到numpy 数组中
face_landmarks_list = face_recognition.face_landmarks(image)
#查找图像中所有面部的所有面部特征
for face_landmarks in face_landmarks_list:
#构建特征位置列表
facial_features = [
'chin',
'left_eyebrow',
'right_eyebrow',
'nose_bridge',
'nose_tip',
'left_eye',
'right_eye',
'top_lip',
'bottom_lip']
pil_image = Image.fromarray(image)
#实现array到image的转换
d = ImageDraw.Draw(pil_image)
#设置画笔
for facial_feature in facial_features:
d.line(face_landmarks[facial_feature], width=5)
#遍历特征点,并绘制在图片上
pil_image.show()
#显示图片
结果为: