파이썬으로 gif의 시각화/읽기/쓰기 + 고속화【OpenCV】

완전히 메모입니다. .
직업 무늬 자주 쓰는 느낌(?)

로딩



scikit-video 버전


  • 안전책이라면
  • from skvideo.io import vread
    gif = vread("sample.gif")
    # print(gif.shape) # => (例): (21, 600, 600, 3)
    
  • 하지만 이것은 늦기 때문에 ↓ 쪽이 좋다고 생각한다

  • OpenCV 버전


  • 빠른
  • import cv2
    import numpy as np
    
    # faster than `vread` in `skvideo.io`
    def vread(path, T=30):
        cap = cv2.VideoCapture(path)
        gif = [cap.read()[1][...,::-1] for i in range(T)]
        gif = np.array(gif)
        cap.release()
        return gif
    
    gif = vread("sample.gif", T=21)
    # print(gif.shape) # => (例): (21, 600, 600, 3)
    
  • 프레임수는 주어야 하는 것만이 난점.
  • 프레임 수 주지 않는다 (목록 내용 표기가 아니다) 보통의 쓰는 방법의 예↓
  • import cv2
    
    filepath = "data/raw/GH010005-0.mp4"
    cap = cv2.VideoCapture(filepath)
    
    while(cap.isOpened()):
        ret, frame = cap.read()
        if ret:
            cv2.imshow("Frame", frame)
            cv2.waitKey(1)
        else:
            cap.release()
    cv2.destroyAllWindows()
    

    표시



    창 표시


    import cv2
    cv2.namedWindow("frame", cv2.WINDOW_NORMAL)
    
    for t in range(len(gif)):
        cv2.imshow("frame", gif[t])
        cv2.waitKey(50) # 少しだけ待たないと表示されない
    
    cv2.destroyAllWindows()
    



    jupyter에서의 표시


    import matplotlib.pyplot as plt
    %matplotlib inline
    
    plt.figure(figsize=(21,9))
    for t in range(21):
        plt.subplot(3,7,t+1)
        plt.imshow(gif[t])
    plt.show()
    



    쓰기


    import moviepy.editor as mpy
    def npy_to_gif(npy, filename):
        clip = mpy.ImageSequenceClip(list(npy), fps=10)
        clip.write_gif(filename)
    

    (로드 시간 비교)


  • OpenCV 승리!



  • 이상!



    (gif는 여기에서 빌렸습니다 htps: //미로. 메 m. 이 m / ma x / 1200 / 1 * Ln Q5s ru-tJmlvRWmDsdSvw. 기 f)

    좋은 웹페이지 즐겨찾기