Python3 & OpenCV 視頻轉字元動畫教程
教程簡介:本教程使用 OpenCV 處理圖片視頻,將視頻轉為字元畫序列,再在終端中播放字元動畫。除了 OpenCV 的操作,本教程還會了解游標定位轉義編碼的使用。
本項目教程由FrostSigh發布在實驗樓,完整教程及在線練習地址:Python3 & OpenCV 視頻轉字元動畫
一、項目簡介
在介紹如何用 Python3 & OpenCV 將視頻轉成字元動畫之前,先簡單的介紹一下 OpenCV 吧,畢竟可能很多小夥伴不太了解:
百度百科:
OpenCV是一個基於BSD許可(開源)發行的跨平台計算機視覺庫,可以運行在Linux、Windows和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實現了圖像處理和計算機視覺方面的很多通用演算法。
1.1. 知識點
- OpenCV 編譯
- 使用 OpenCV 處理圖片、視頻
- 圖片轉字元畫原理
- 守護線程
- 游標定位轉義編碼
1.2. 效果展示
接著來看看效果展示,很可愛又很酷炫:(動畫截圖)
播放停止後的效果,注意終端中並無殘留的動畫字元:
二、項目原理
大家應該都明白視頻其實可以看作一系列圖片組成的,因此視頻轉字元動畫最基本的便是圖片轉字元畫,這一部分內容也在 Python 圖片轉字元畫 課程中有講過。
在這裡簡單的說一下圖片轉字元畫的原理:首先將圖片轉為灰度圖,每個像素都只有亮度信息(用 0~255 表示)。然後我們構建一個有限字符集合,其中的每一個字元都與一段亮度範圍對應,我們便可以根據此對應關係以及像素的亮度信息把每一個像素用對應的字元表示,這樣字元畫就形成了。
字元動畫要能播放才有意義。最最簡單粗暴的,用文本編輯器打開字元動畫文本文件,然後狂按 PageDown 鍵就能播放。然而這真的太簡單太粗暴了,一點都不優雅。
我們還是在終端裡面播放字元動畫,只需要一幀一幀輸出就能達到動畫的效果了,然而這卻有一個很大的弊端:播放時,你會發現終端右邊的滾動條會越來越小(如果有的話);播放完畢後,在終端中往上翻頁,全是之前輸出的字元畫,播放前的命令歷史全部被擠佔掉了。在本實驗後面提供了這個問題的解決辦法。
三、實驗環境及OpenCV的編譯安裝
在線練習環境:
實驗樓為本項目提供了在線環境。本課程的實驗中使用了 OpenCV 3.1,因此我們需要編譯安裝它。首先我們需要處理一個問題:當前實驗樓的環境中 python3 命令使用的 python 版本為 3.5,我們需要將 python3 命令使用的 python 版本切換為 3.4。
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.4 70 --slave /usr/bin/python3m python3m /usr/bin/python3.4m
然後安裝一些依賴的包:
$ sudo apt-get update$ sudo apt-get install python3-dev$ sudo pip3 install numpy$ sudo apt-get install cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
現在可以開始編譯 OpenCV 3.1 了,下面是在實驗樓環境中編譯 OpenCV 3.1 所需的命令,其他環境中的編譯請參考官網。
$ wget https://github.com/Itseez/opencv/archive/3.1.0.zip$ unzip 3.1.0.zip && cd opencv-3.1.0/$ mkdir build && cd build$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local PYTHON3_EXECUTABLE=/usr/bin/python3 PYTHON_INCLUDE_DIR=/usr/include/python3.4 PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.4m.so PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.4/dist-packages/numpy/core/include ..$ make -j4
不想自己編譯的同學請下載編譯好的二進位文件,然後解壓並進入 opencv-3.1.0/build 目錄。
本項目的完整代碼、詳細步驟及demo,可以在實驗樓查看並在線完成:Python3 & OpenCV 視頻轉字元動畫
更多Python經典項目:Python全部 - 課程
推薦閱讀:
※Vim 不是那麼可怕,這裡有5個免費的資源可以用來學習它
※如何看待博客技術文章被人抄襲複製?
※C++奇技淫巧:通過無腦字元串替換的方法,來把一個遞歸函數改寫成非遞歸函數
※永久免費!吳恩達給你的人工智慧第一課