使用 OpenCV 在 Python 中製作動畫影像


簡介

動畫圖片是由一系列靜態影像自動播放,以連續和動態的方式顯示相關內容,並且它們比影片佔用更小的空間。此外,許多線上和移動應用程式都以與支援靜態照片相同的方式支援動畫影像,儘管它們並不總是允許上傳影片。在這種情況下,動畫圖片可以非常有用。顯然,還有其他一些原因可以解釋為什麼動畫圖形更受歡迎。有時,合併類似或不相關的照片僅僅是為了娛樂。

在本文中,我們將學習在 Python OpenCV 中製作動畫影像的步驟。

OpenCV

Gary Bradsky 於 1999 年在英特爾啟動了 OpenCV,並且直到 2000 年才釋出了第一個版本。Vadim Pisarevsky 目前與 Gary Bradsky 合作,負責英特爾俄羅斯軟體的 OpenCV 團隊。OpenCV 用於 Stanley,這是一輛在 2005 年 DARPA 大挑戰賽中獲勝的車輛,並被評為冠軍。之後,它在 Willow Garage 的幫助下繼續高效地發展,Gary Bradsky 和 Vadim Pisarevsky 負責該專案。如今,OpenCV 支援與計算機視覺和機器學習相關的各種方法,並且其功能每天都在不斷增長。

OpenCV 可在多個平臺上訪問,包括 Windows、Linux、OS X、Android 和 iOS,並且它支援多種程式語言,包括 C++、Python、Java 等。此外,現在正在開發基於 CUDA 和 OpenCL 的高速 GPU 操作介面。

它為所有語言提供了廣泛的支援,包括 Python、C++、Android、Java 等。由於其特性,它易於使用且很受歡迎。它用於使用各種程式語言開發影像處理或渲染應用程式的過程。

在本教程中,我們將嘗試使用 OpenCV 的 CV2 版本執行某些影像轉換。所以讓我們開始吧。

安裝要求

程式碼需要一個正常安裝的 Python 3,以及 OpenCV 及其依賴項 NumPy。

我們需要一個環境來執行程式,我們可以使用 Jupyter Notebook 來執行我們的程式。在這裡,我們使用了 OpenCV 進行影像動畫,但還有許多其他演算法可以用來製作影像動畫或製作 GIF。

如何使用 OpenCV 製作動畫影像?

動畫圖片是由一系列靜態影像自動播放,以顯示相關動畫。我們將使用 NumPy 包中包含的 hstack() 方法來連線我們擁有的兩張圖片。hstack 函式用於水平(即列方向)堆疊輸入陣列序列,從而生成一個數組。作為引數,hstack 函式期望一個包含陣列順序的元組。

我們透過在程式中掛載驅動器並設定影像路徑,從 Google Drive 匯入了影像。

示例

from google.colab import drive
drive.mount('/content/drive')

輸出

Mounted at /content/drive

獲取路徑

path='/content/drive/MyDrive/Doremon.jpeg'

import cv2
import numpy as npp

from google.colab.patches import cv2_imshow
# Load the image
img1 = cv2.imread(path)
h, w, c = img1.shape


# Loop for a specified number of frames
for i in range(100):
   # Update the image
   ll = img1[:, :(i % w)]
   rr = img1[:, (i % w):]
  
   img2 = npp.hstack((rr, ll))
      
   # Display the updated image
   cv2.imshow( 'animation',img2)

   # Wait for a specified amount of time
   cv2.waitKey(100)

# Close the window
cv2.destroyAllWindows()

結論

我們學習了使用 OpenCV 和幾行 Python 程式碼開始影像動畫所需的非常基礎的過程。

能夠使用程式碼編寫影像的價值顯然遠遠超出了僅僅能夠編寫隨機內容。例如,每個幀都可以使用 cv.imread 從儲存位置讀取,或者可以使用 cv2.VideoCapture 直接從相機捕獲。在將每個幀新增到電影之前,我們可以對該幀執行一個或多個不同的操作,例如顏色轉換、查詢輪廓、形態學變化等等。

更新於: 2023年8月24日

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告