在 Python 中使用 OpenCV 制作简单图像动画

举报
海拥 发表于 2022/04/30 16:32:31 2022/04/30
【摘要】 在本文中,我们将讨论如何使用 python 的 OpenCV 模块为图像设置动画。假设我们有一张图片。使用该单个图像,我们将对其进行动画处理,使其呈现为同一图像的连续阵列。这对于在某些游戏中设置背景动画很有用。例如,在一个飞扬的小鸟游戏中,为了让小鸟看起来向前移动,背景需要向后移动。为了理解这一点,让我们首先考虑一个线性 Python 列表。考虑一下下面的代码。a = ['-', '-', ...

在本文中,我们将讨论如何使用 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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。