OpenCV 对图像进行动画处理
介绍
动画图片是一系列静态图片,它们会自动播放以连续和动态的方式展示相关材料,并且它们比视频更小。此外,许多在线和移动应用程序支持以与静态照片相同的方式使用动画图片,尽管它们并不总是允许上传电影。在这种情况下,动画图片可能非常有用。显然,还有其他几个原因为什么人们更喜欢动画图形。有时,组合相似或无关联的照片仅仅是为了好玩。
在本文中,我们将学习使用Python OpenCV制作动画图片的步骤。
OpenCV
Gary Bradsky于1999年在Intel发起了OpenCV项目,实际上直到2000年才发布了初始版本。Vadim Pisarevsky现在与Gary Bradsky合作,负责监督Intel俄罗斯软件团队。OpenCV被用于斩获2005年DARPA大挑战的车辆Stanley,被评为获胜者。之后,在Willow Garage的帮助下,OpenCV的发展继续进行,项目负责人是Gary Bradsky和Vadim Pisarevsky。如今,OpenCV支持与计算机视觉和机器学习相关的各种方法,其功能每天都在不断增长。
OpenCV可在多个平台上使用,包括Windows、Linux、OS X、Android和iOS,它支持多种编程语言,包括C++、Python、Java等。此外,现在正在开发基于CUDA和OpenCL的高速GPU操作接口。
它为所有语言提供广泛的支持,包括Python、C++、Android、Java等。由于其具有的特性,它易于使用和受欢迎。通过使用各种编程语言来开发图像处理或渲染应用程序的过程中,常常会使用它。
在本教程中,我们将使用OpenCV的CV2版本来尝试在过程中执行某些图片变换。让我们开始吧。
安装要求
这段代码需要已安装Python 3,并且安装了OpenCV和其依赖项NumPy。
我们需要一个环境来运行程序,我们可以使用Jupyter Notebook来执行我们的程序。这里我们使用了OpenCV来实现图片动画,但也有许多其他算法可以使用,通过这些算法我们可以为图片添加动画效果,甚至可以制作gif。
如何使用OpenCV制作动画图片
动画图片是一系列静态图片,它们会自动播放以显示相关动画。我们将使用NumPy软件包中的hstack()方法来连接这两个图片。hstack函数用于将输入数组序列水平堆叠(即按列堆叠),从而得到一个单一的数组。作为参数,hstack函数需要一个包含数组顺序的元组。
我们通过在程序中挂载Google Drive并设置图像路径来导入图像。
示例
from google.colab import drive
drive.mount('/content/drive')
输出
Mounted at /content/drive
获取路径
path='/content/drive/MyDrive/Doremon.jpeg'
import cv2
import numpy as npp
from google.colab.patches import cv2_imshow
# Load the image
img1 = cv2.imread(path)
h, w, c = img1.shape
# Loop for a specified number of frames
for i in range(100):
# Update the image
ll = img1[:, :(i % w)]
rr = img1[:, (i % w):]
img2 = npp.hstack((rr, ll))
# Display the updated image
cv2.imshow( 'animation',img2)
# Wait for a specified amount of time
cv2.waitKey(100)
# Close the window
cv2.destroyAllWindows()
结论
我们通过利用OpenCV和几行Python代码学习了启动图片动画所需的非常基本的过程。
能够使用代码编写图片的价值远不止于能够编写随机内容。例如,每个帧可能已经通过cv.imread从存储位置读取,或者可能直接通过cv2.VideoCapture从摄像机捕获。在将每个帧添加到电影之前,我们有能力对该帧进行一个或多个不同的操作,比如颜色转换、轮廓查找、形态学变化等等。