前言

今天要使用 MoviePy 实现高斯模糊的效果

高斯模糊效果

要对图片进行模糊处理,我们需要用到 skimage 中的 gaussian 函数,它以图片的 numpy 数组作为参数进行处理。

MoviePy 中要获取每一帧也比较简单,可以通过 VideoClipfl_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],回复[模糊]获取源码