Python으로 가로로 전환되는 두 이미지 애니메이션
8882 단어 datasciencepython
두 개의 이미지가 있는데 두 번째 이미지가 첫 번째 이미지를 천천히 교체합니다(가로 방향).
이렇게 하려면 모양이 같은 두 개의 이미지를 준비해야 합니다(Python에서 크기를 조정하는 방법은 보여주지 않겠습니다).
This method can be used to make any number of images transition (with a little bit of work).
이미지 로드 중
먼저 첫 번째 것들. 두 개의 이미지를 로드해 보겠습니다.
# We'll need them later
import numpy as np
import matplotlib.pylab as plt
from PIL import Image
image1 = np.array(Image.open('image1.png').convert('RGB'))
image2 = np.array(Image.open('image2.png').convert('RGB'))
제 경우에는 이것이 첫 번째 이미지입니다.
그리고 두 번째:
두 이미지 모두 모양이 있습니다: (339, 339, 3)
프레임 생성
먼저 이미지를 병합하고 나중에 이를 활용하겠습니다.
fimage1 = image1.reshape((-1,3))
fimage2 = image2.reshape((-1,3))
애니메이션을 만들려면 각 프레임이 어떻게 보이는지 알아야 합니다. 제 경우에는 두 번째 이미지의 픽셀 중 주어진 부분(
perc
)으로 프레임을 정의하고 싶었습니다. 예를 들어 perc=0.1
인 경우 첫 번째 0.1픽셀은 두 번째 이미지에서, 0.9는 첫 번째 이미지에서 가져온 것입니다. Fade
는 그렇게 할 함수입니다. 두 개의 병합된 이미지(이미지의 원래 모양과 perc)가 주어지면 두 이미지를 연결하고 이미지를 원래 모양으로 되돌립니다.def fade(shape, fimage1, fimage2, perc):
i = int(fimage1.shape[0] * perc)
return np.concatenate((fimage2[:i], fimage1[i:, :])).reshape(shape)
어디에:
다음은 내가 생성한 몇 가지 이미지입니다.
애니메이션 만들기
Matplotlib에서 애니메이션을 만드는 방법에 대해서는 자세히 설명하지 않겠습니다. 여기 제 코드가 있습니다.
fig = plt.figure(figsize=(12, 10.8)) # Depends on aspect of your images
ax = plt.axes()
pic = ax.imshow(np.zeros(image1.shape)) # Create empty image of the same shape as image to plot
frames = 150 # Number of frames to generate
def init():
pic.set_array(np.zeros(image1.shape))
return [pic]
# This funtion generates i-th frame.
def animate(i):
pic.set_array(fade(image1.shape, fimage1, fimage2, i/frames))
return [pic]
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=frames, blit=True)
anim.save('animaton.mp4', fps=60, extra_args=['-vcodec', 'libx264'])
plt.show()
프레임 수에 따라 파일
animation.mp4
이 생성되어야 합니다.
Reference
이 문제에 관하여(Python으로 가로로 전환되는 두 이미지 애니메이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/finloop/animating-two-images-transitioning-into-each-other-with-matplotlib-55bg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)