作者主页:海拥

在本文中,我们将讨论如何使用 python 的 OpenCV 模块为图像设置动画。

假设我们有一张图片。使用该单个图像,我们将对其进行动画处理,使其呈现为同一图像的连续阵列。这对于在某些游戏中设置背景动画很有用。例如,在一个飞扬的小鸟游戏中,为了让小鸟看起来向前移动,背景需要向后移动。为了理解这一点,让我们首先考虑一个线性 Python 列表。考虑一下下面的代码。

a = ['-', '-', '-', 1, '-', '-', '-']
n = len(a) # 数组的长度

for i in range(2*n):
# i 是列表的索引 a i%n 将在 range(0,n) 中使用切片
# 我们可以使数字 1 看起来像在列表中移动,这类似于循环列表
print(a[(i % n):]+a[:(i % n)])

输出:

['-', '-', '-', 1, '-', '-', '-']
['-', '-', 1, '-', '-', '-', '-']
['-', 1, '-', '-', '-', '-', '-']
[1, '-', '-', '-', '-', '-', '-']
['-', '-', '-', '-', '-', '-', 1]
['-', '-', '-', '-', '-', 1, '-']
['-', '-', '-', '-', 1, '-', '-']
['-', '-', '-', 1, '-', '-', '-']
['-', '-', 1, '-', '-', '-', '-']
['-', 1, '-', '-', '-', '-', '-']
[1, '-', '-', '-', '-', '-', '-']
['-', '-', '-', '-', '-', '-', 1]
['-', '-', '-', '-', '-', 1, '-']
['-', '-', '-', '-', 1, '-', '-']

从上面的代码,我们可以看到数字1的位置在变化,即索引在变化。这是我们将用于水平动画图像的原则。

我们将使用NumPy 模块中的hstack()函数连接两个图像。hstack 函数将一个由数组顺序组成的元组作为参数,用于将输入数组的序列水平(即按列)堆叠以形成单个数组。

语法:

numpy.hstack((array1,array2))

示例:

import cv2
import numpy as np

img = cv2.imread('haiyong.jpg')

height, width, c = img.shape

i = 0

while True:
i += 1

# 将图像分为左右部分,就像列表连接我们将左右连接在一起
l = img[:, :(i % width)]
r = img[:, (i % width):]

img1 = np.hstack((r, l))

# 此函数将连接两个矩阵
cv2.imshow('animation', img1)

if cv2.waitKey(1) == ord('q'):

# 按 q 终止循环
cv2.destroyAllWindows()
break

输出