前言
今天要使用 MoviePy
实现高斯模糊的效果
高斯模糊效果
要对图片进行模糊处理,我们需要用到 skimage
中的 gaussian
函数,它以图片的 numpy
数组作为参数进行处理。
在 MoviePy
中要获取每一帧也比较简单,可以通过 VideoClip
的 fl_image
来获取。
万事具备,直接开写
1
2
3
4
5
6
7
8
9
|
def gaussian_blur(image):
return gaussian(image.astype(float), sigma=3)
def blur():
video = VideoFileClip("input.mp4")
blurred_video = video.fl_image(gaussian_blur)
blurred_video.write_videofile("output.mp4")
blur()
|
模糊一个区域
上一小节实现的是整个屏幕的模糊,如果想要局部模糊要怎么处理?
由于从 MoviePy
得到的图片是不可变的的数组,所以我们要拷贝一份出来,然后选定一个区域做成切片,然后把切片数据进行高斯模糊就行了,最后把模糊的数据替换掉原有的图片区域就可以得到局部模糊了,代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def region_of_interest(image):
tmp = image.copy()
roi = image[100:200, 150:250]
roi = gaussian(roi.astype(float), sigma=5)
tmp[100:200, 150:250] = roi
return tmp
def blur_rect():
video = VideoFileClip("input.mp4")
blured_video = video.fl_image(region_of_interest)
blured_video.write_videofile("output.mp4")
blur_rect()
|
总结
需要对视频模糊处理,就需要对图片的每一帧都进行模糊,在 MoviePy
中可以通过 VideoClip.fl_image
来获取每一帧数据,然后对这些数据采用模糊算法,处理得到的结果就具有模糊效果。
对于局部模糊,需要对每一帧的局部做处理,只需要把对应的数据做成切片,然后把这些切片做模糊处理就可以得到局部模糊的效果。
参考
关注公众号[devbins],回复[模糊]获取源码