📜  在Python中使用 OpenCV 动画图像

📅  最后修改于: 2022-05-13 01:54:33.903000             🧑  作者: Mango

在Python中使用 OpenCV 动画图像

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

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

Python3
a = ['-', '-', '-', 1, '-', '-', '-']
n = len(a)  # length of the array
 
for i in range(2*n):
    # i is the index of the list a
    # i%n will have a value in range(0,n)
    # using slicing we can make the digit 1
    # appear to move across the list
    # this is similar to a cyclic list
    print(a[(i % n):]+a[:(i % n)])


Python3
import cv2
import numpy as np
 
img = cv2.imread('shinchan.jpg')
 
height, width, c = img.shape
 
i = 0
 
while True:
    i += 1
     
    # divided the image into left and right part
    # like list concatenation we concatenated
    # right and left together
    l = img[:, :(i % width)]
    r = img[:, (i % width):]
 
    img1 = np.hstack((r, l))
     
    # this function will concatenate
    # the two matrices
    cv2.imshow('animation', img1)
 
    if cv2.waitKey(1) == ord('q'):
       
        # press q to terminate the loop
        cv2.destroyAllWindows()
        break


输出

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

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

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

语法

numpy.hstack((array1,array2))

示例

Python3

import cv2
import numpy as np
 
img = cv2.imread('shinchan.jpg')
 
height, width, c = img.shape
 
i = 0
 
while True:
    i += 1
     
    # divided the image into left and right part
    # like list concatenation we concatenated
    # right and left together
    l = img[:, :(i % width)]
    r = img[:, (i % width):]
 
    img1 = np.hstack((r, l))
     
    # this function will concatenate
    # the two matrices
    cv2.imshow('animation', img1)
 
    if cv2.waitKey(1) == ord('q'):
       
        # press q to terminate the loop
        cv2.destroyAllWindows()
        break

输出