20行Python代码教你让视频字符化
我們經常在B站上看到一些字符鬼畜視頻,主要就是將一個視頻轉換成字符的樣子展現出來。看起來是非常高端,但是實際實現起來確實非常簡單,我們只需要接觸opencv模塊,就能很快的實現視頻字符化。
OpenCV的安裝及圖片讀取
在Python中我們只需要用pip安裝即可,我們在控制臺執行下列語句:
安裝完成就可以開始使用。我們先讀取一個圖片:
首先我們使用cv2.imread方法讀取圖片,該方法返回一個ndarray對象。然后調用imshow方法顯示圖像,調用后會出現一個窗口,因為這個窗口只會出現一瞬間,所以我們調用waitKey等待輸入,傳入0表示無限等待。因為opencv是使用c++編寫的,所以我們需要銷毀內存。
OpenCV中的一些基礎操作
我們將視頻字符化的思路就是先將視頻轉換為一幀一幀的圖像,然后對圖像進行字符化處理,最后展示出來就是字符視頻的效果了。在我們生成字符畫之前,我們還要看一些OpenCV的操作。
(1)灰度轉換
灰度處理是一個非常常用的操作,我們原始的圖片是有BGR三個圖層(在OpenCV中,圖像是以BGR形式讀取)。我們進行灰度處理直觀上看就是將圖片變成黑白,而本質上是將圖片的三個圖層通過計算,變成一個圖層。而這種計算是不需要我們做的,我們只需要調用OpenCV中的函數即可:
效果圖和原圖對比如下:
左邊為原圖,右邊為灰度轉換后的圖像。
(2)改變圖片大小
因為字符化后圖像會比較大,所以我們需要先縮小圖片,我們調用cv2.resize即可改變圖像大小:
(3)逐幀讀取視頻
我們可以通過VideoCapture讀取視頻,然后調用其中的方法讀取每一幀。
有了上面的操作,我們就可以開始我們下一步的工作了。
圖片字符化
對于只有一個通道的圖片,我們可以把它當成一個矩形,這個矩形最小單位就是一個像素。而字符化的過程就是用字符替代像素點的過程。所以我們要遍歷圖像的每個像素點,但是我們應該用什么字符取代呢?我們顏色有一個參照表,而opencv將這個參數表切割成256份,代表不同的程度,我們也可以做一個參照表,不過表中的內容不是顏色,而是字符。
上圖為顏色表,我們可以使顏色表和字符表建立映射關系。假如字符表如下:mqpka89045321@#$%^&*()_=||||}我們可以得到下列公式:
經過變換可以求得相應顏色對應字符表中的字符:
這個公式不理解也沒關系,只需要會用即可。下面就是我們完整的代碼了:
生成如下字符畫:
因為尺寸比較小的關系,看出來的效果不是很好,我們調節好大小就好了。
視頻轉字符
我們知道圖片轉字符,自然視頻轉字符就不是什么問題了,我們只需要在逐幀讀取中執行圖片字符化操作即可。
這樣我們就會每個5毫秒執行一幀畫面,在我們使用pycharm執行時,會發現并沒有執行清屏操作,所以我們需要到命令行運行。最終效果就是我們的字符視頻了
在選取字符表時我們需要注意主體的顏色,如果主體顏色較淺,則字符表的尾部應該為一些復雜字符,如:$%#@&。字符表頭部為一些簡單字符,如:-|/等。如果主體顏色較深,而背景顏色較淺,則反之。當然這沒有唯一的標準,大家可以慢慢調節。
本文來自千鋒教育,轉載請注明出處。
總結
以上是生活随笔為你收集整理的20行Python代码教你让视频字符化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript如何中断循环执行?
- 下一篇: python详细的安装教程分享!