使用image morphing(图像变形)的相关方法,将猫咪的图片逐帧变成老虎的图片。
部分效果图如下:
代码如下:
import cv2
import os
#读取猫图和虎图
cat_image = cv2.imread('cat.png')
tiger_image = cv2.imread('tiger.png')
# 确保两张图片的大小一致,将猫图的大小变成和虎图的大小一致
tiger_height, tiger_width, _ = tiger_image.shape
cat_image = cv2.resize(cat_image, (tiger_width, tiger_height), interpolation=cv2.INTER_CUBIC)
#检查是否存在指定名字的文件夹,没有的话就创建一个文件夹,用于存储图片变化过程中的中间过渡图片
if not os.path.exists('images'):
os.makedirs('images')
# 指定生成视频的参数,每秒60张图片,共180张图片,持续3秒,可以调整每秒120张图片等,以显示更加细腻
output_video = cv2.VideoWriter('morphing.avi', cv2.VideoWriter_fourcc(*'XVID'), 60, (tiger_width, tiger_height))
numbers = 180
# 计算混合系数,主要用于控制图片变化的程度,numbers越大,更多张图片,每张图片变化的更小,显示得会更加细腻
for i in range(numbers):
alpha = i / numbers
# 使用混合系数 alpha 逐渐混合猫和老虎的图像
morphed_image = cv2.addWeighted(cat_image, 1 - alpha, tiger_image, alpha, 0)
# 保存中间状态图像,将图片存放在Images文件夹中
cv2.imwrite(f'images/{i:03d}.jpg', morphed_image)
# 将中间状态图像添加到视频中
output_video.write(morphed_image)
# 释放视频对象
output_video.release()
具体实现方法:
1.使用python语言完成任务,代码只有一个mian.py。
2.两张原图片,cat.png和tiger.png。请这两张图片放在与mian.py同一目录下。
3.运行代码之后会生成一个文件夹,生成一个视频,文件夹images记录了猫变虎过程中每一帧的过渡图片,代码中设置的是每秒钟60张中间过渡图片,共3秒,所以有180张过渡图片,图片名字从000到179。具体参数可以修改以获得更好的视觉效果。
4.morphing.avi是生成的变化视频。
5.代码需要两个库,代码前两行:
import cv2
import os
导入cv2的时候,在pycharm的“文件”、“设置”、“项目-Python解释器”中安装的软件包的名字为:opencv-python,而不是cv2。
效果:
在images文件夹中有180张中间过渡图片:
生成的是morphing.avi,视频截图如下: