实现抖音视频抖动效果---OpenCV-Python开发指南(53)
【摘要】
目录
抖音视频抖动原理实现抖音视频抖动
抖音视频抖动原理
感兴趣的不妨随便弄一个视频使用抖音抖动效果观察。这里,博主建议读者使用国际象棋的视频图像,这种方块的格式更能看清细微的抖动变化。
我们观察抖音抖动视频会发现,抖动效果的原理是对视频中的一些帧进行剪切和放大到原图,出现视频中的人或者物体放大颤动的效果,并因为视觉残留出现闪影效果。
换到OpenC...
抖音视频抖动原理
感兴趣的不妨随便弄一个视频使用抖音抖动效果观察。这里,博主建议读者使用国际象棋的视频图像,这种方块的格式更能看清细微的抖动变化。
我们观察抖音抖动视频会发现,抖动效果的原理是对视频中的一些帧进行剪切和放大到原图,出现视频中的人或者物体放大颤动的效果,并因为视觉残留出现闪影效果。
换到OpenCV中进行处理,就可以分为以下几个步骤:
- 读取原视频,设置其抖动的帧数,比如相邻的9帧的图像按照图像中心进行剪裁,然后缩放到原来的尺寸
- 设置抖动中不变的帧数,比如以9帧为间隔来处理图像
实现抖音视频抖动
按照原理,我们先读取视频,或者直接使用摄像头。然后获取图像的帧数FPS,同时获取图像的中心Center,将图像按比例剪裁20%之后,在放大至原图。
下面,我们来实现视频抖动效果:
#抖动视频图像处理
def video_shake_effect(img): height, width, n = img.shape new_img = img[int(height * 0.1):int(height * 0.9), int(width * 0.1):int(width * 0.9)] new_img = cv2.resize(new_img, (width, height)) return new_img
if __name__ == "__main__": cap = cv2.VideoCapture("45.mp4") #获取视频帧率,视频宽度高度,所有通过cv2.CAP_PROP_FPS获取的参数都是浮点数,而视频宽高必须为整数,所以要进行强制类型转换。 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)) i = 1 count = 5 fourcc = cv2.VideoWriter_fourcc(*'MJPG') videoWriter = cv2.VideoWriter("output.avi", fourcc, fps, (width, height)) while (cap.isOpened()): ret, frame = cap.read() if ret: if (i % 5 == 0 or 0 < count < 5): frame = video_shake_effect(frame) videoWriter.write(frame) else: count = 5 cv2.imshow('video', frame) videoWriter.write(frame) i += 1 c = cv2.waitKey(1) if c == 27: break else: break cap.release() videoWriter.release() cv2.destroyAllWindows()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
运行之后,效果如下:
上图抖动节奏有间歇,是因为博主将GIF帧率调小了点,实际情况抖动效果基本一致。上面程序应该很好理解都是前面博文的知识,这里不在赘述,至于抖动频率算法,这里是打开视频先抖动5帧,然后每间隔5帧率抖动一次。
文章来源: liyuanjinglyj.blog.csdn.net,作者:李元静,版权归原作者所有,如需转载,请联系作者。
原文链接:liyuanjinglyj.blog.csdn.net/article/details/115216095
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)