通過python繪制華強買瓜的字符畫視頻的步驟詳解
已經(jīng)11月了,不知道還有沒有人看華強買瓜。。。要把華強賣瓜做成字符視頻,總共分為三步
- 讀取視頻
- 把每一幀轉為字符畫
- 把字符畫表現(xiàn)出來
讀取視頻
通過imageio讀取視頻,除了pip install imageio之外,還需要pip install imageio-ffmpeg。
由于視頻中的圖像都是彩色的,故而需要將rgb三色轉為單一的強度,并將轉化后的圖像裝入一個列表中。
import imageio
import numpy as np
import matplotlib.pyplot as plt
video = imageio.get_reader('test.mp4')
imgs = []
for img in video:
imgs.append(np.mean(img,2))
plt.imshow(imgs[0])
plt.show()

轉為字符
這個視頻雖然已被壓縮,但對于字符畫而言還是太大了,所以轉字符畫之前需對其進一步壓縮。這里采取最簡單的方法——即對相鄰的像素取平均值。
#將圖像寬度縮小至width
from itertools import product #用于循環(huán)嵌套
def resizeImg(img,w,h=None):
m,n = img.shape
if n<w:
return img
if not h:
h = int(m*w/n)
im = np.zeros([h,w])
rw,rh = n/w,m/h #縮放比例
dw,dh = int(rw),int(rh) #取均值的步長
for i,j in product(range(h),range(w)):
I,J = int(i*rh),int(j*rw)
im[i,j] = np.mean(img[I:I+dh,J:J+dw])
return im
# 測試一下
im = resizeImg(imgs[0],160)
plt.imshow(im)
plt.show()

接下來,就可以生成字符畫了,所謂字符畫,無非是將像素值映射成一個字符,方法非常簡單
pixels = "▇圞國圖囜ⒶⒷⒸB8&WMZO0QJX@%&jfoavunxr#t/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ^`'. " #用于映射的字符
def im2txt(img):
im = np.floor(img/255*len(pixels)).astype(int)
txts = ""
for line in im:
txts += "".join([pixels[i] for i in line])
txts += '\r\n' #像素換行時文本也要換行
return txts
#測試
txt = im2txt(im)
print(txt)
結果如下

動畫
讓命令行繪制字符視頻,聽上去可能有些不可思議,但這個功能可以僅憑python內置的模塊實現(xiàn)——即curses,唯一可惜的是,Windows下的Python并不內置這個模塊,需要額外安裝。
先下載和自己python版本相符的curses,然后通過pip命令安裝
>pip install "curses-2.2.1+utf8-cp310-cp310-win_amd64.whl"
然后就可以在python中調用了。由于視頻太大,所以這里只演示一小段,效果如下

主程序的代碼如下
if __name__ == "__main__":
video = imageio.get_reader('test.mp4')
txts = []
# 生成字符畫
for img in video:
im = resizeImg(np.mean(img,2),120,30)
txts.append(im2txt(im))
# 初始化屏幕
scr = curses.initscr()
scr.timeout(40) #每次等待鍵盤輸入的時間為40ms
#scr.
for txt in cycle(txts):
scr.addstr(0,0,txt)
scr.border(0)
scr.refresh()
#curses.delay_output(25)
if scr.getch()==27: #如果按下`esc`則退出`
break
到此這篇關于通過python繪制華強買瓜的字符畫視頻的文章就介紹到這了,更多相關python華強買瓜字符畫視頻內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python腳本提取fasta文件單序列信息實現(xiàn)
這篇文章主要為大家介紹了Python腳本提取fasta文件單序列信息實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
python 實現(xiàn)對文件夾中的圖像連續(xù)重命名方法
今天小編就為大家分享一篇python 實現(xiàn)對文件夾中的圖像連續(xù)重命名方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
Python drop方法刪除列之inplace參數(shù)實例
這篇文章主要介紹了Python drop方法刪除列之inplace參數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
詳解Django中 render() 函數(shù)的使用方法
這篇文章主要介紹了Django中 render() 函數(shù)的使用方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Python Unittest ddt數(shù)據(jù)驅動的實現(xiàn)
本文主要介紹了Python Unittest ddt數(shù)據(jù)驅動的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02

