python繪制字符畫視頻的示例代碼
已經(jīng)11月了,不知道還有沒有人看華強(qiáng)買瓜。。。要把華強(qiáng)賣瓜做成字符視頻,總共分為三步
- 讀取視頻
- 把每一幀轉(zhuǎn)為字符畫
- 把字符畫表現(xiàn)出來
讀取視頻
通過imageio讀取視頻,除了pip install imageio之外,還需要pip install imageio-ffmpeg。
由于視頻中的圖像都是彩色的,故而需要將rgb三色轉(zhuǎn)為單一的強(qiáng)度,并將轉(zhuǎn)化后的圖像裝入一個(gè)列表中。
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()

轉(zhuǎn)為字符
這個(gè)視頻雖然已被壓縮,但對(duì)于字符畫而言還是太大了,所以轉(zhuǎn)字符畫之前需對(duì)其進(jìn)一步壓縮。這里采取最簡(jiǎn)單的方法——即對(duì)相鄰的像素取平均值。
#將圖像寬度縮小至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) #取均值的步長(zhǎng)
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
# 測(cè)試一下
im = resizeImg(imgs[0],160)
plt.imshow(im)
plt.show()

接下來,就可以生成字符畫了,所謂字符畫,無非是將像素值映射成一個(gè)字符,方法非常簡(jiǎn)單
pixels = "▇圞國(guó)圖囜ⒶⒷⒸ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' #像素?fù)Q行時(shí)文本也要換行
return txts
#測(cè)試
txt = im2txt(im)
print(txt)
結(jié)果如下

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

主程序的代碼如下
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) #每次等待鍵盤輸入的時(shí)間為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
到此這篇關(guān)于python繪制字符畫視頻的示例代碼的文章就介紹到這了,更多相關(guān)python 字符畫視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python將圖片轉(zhuǎn)換為字符畫的方法
- Python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的代碼實(shí)例
- Python簡(jiǎn)單實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的實(shí)例項(xiàng)目
- Python制作動(dòng)態(tài)字符畫的源碼
- Python實(shí)現(xiàn)視頻轉(zhuǎn)換為字符畫詳解
- 基于Python實(shí)現(xiàn)視頻轉(zhuǎn)字符畫動(dòng)漫小工具
- 用Python字符畫出了一個(gè)谷愛凌
- 利用Python字符畫生成甜心教主
- 如何利用python實(shí)現(xiàn)圖片轉(zhuǎn)化字符畫
相關(guān)文章
Python實(shí)現(xiàn)自動(dòng)玩連連看的腳本分享
最近女朋友在玩連連看,玩了一個(gè)星期了還沒通關(guān),真的是菜。實(shí)在是看不過去了,直接用python寫了個(gè)腳本代碼可以自動(dòng)玩連連看,感興趣的可以了解一下2022-04-04
Python實(shí)現(xiàn)隨機(jī)從圖像中獲取多個(gè)patch
經(jīng)常有一些圖像任務(wù)需要從一張大圖中截取固定大小的patch來進(jìn)行訓(xùn)練。本文就來和大家聊聊如何用Python實(shí)現(xiàn)隨機(jī)從圖像中獲取多個(gè)patch,感興趣的可以了解一下2022-08-08
python實(shí)現(xiàn)用于測(cè)試網(wǎng)站訪問速率的方法
這篇文章主要介紹了python實(shí)現(xiàn)用于測(cè)試網(wǎng)站訪問速率的方法,涉及Python中urllib2模塊及時(shí)間的相關(guān)操作技巧,需要的朋友可以參考下2015-05-05
python__new__內(nèi)置靜態(tài)方法使用解析
這篇文章主要介紹了python__new__內(nèi)置靜態(tài)方法使用解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
Python操作SQLite/MySQL/LMDB數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Python操作SQLite/MySQL/LMDB數(shù)據(jù)庫(kù)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
Python實(shí)現(xiàn)文件下載、Cookie以及重定向的方法代碼
本文主要介紹了如何使用 Python 的 requests 模塊進(jìn)行網(wǎng)絡(luò)請(qǐng)求操作,涵蓋了從文件下載、Cookie 處理到重定向與歷史請(qǐng)求等多個(gè)方面,通過詳細(xì)的示例代碼,展示了如何高效地實(shí)現(xiàn)各種網(wǎng)絡(luò)操作,幫助開發(fā)者更輕松地進(jìn)行 HTTP 請(qǐng)求的處理和數(shù)據(jù)管理2025-02-02
深入理解NumPy簡(jiǎn)明教程---數(shù)組3(組合)
本篇文章對(duì)NumPy數(shù)組進(jìn)行較深入的探討。首先介紹自定義類型的數(shù)組,接著數(shù)組的組合,最后介紹數(shù)組復(fù)制方面的問題,有興趣的可以了解一下。2016-12-12

