python绘制穿山甲字符画视频:这喝汤多是一件美逝
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                python绘制穿山甲字符画视频:这喝汤多是一件美逝
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                上次寫了個華強買瓜字符視頻的帖子,下面有人問如何保存,所以這次就寫一個能將字符畫視頻保存下來的帖子,然而時不待我,華強紀元已經結束,現在是穿山甲的時代了。
首先讀取視頻,并轉為字符。視頻是從B站下載的,地址《激戰江南》穿山甲名場面。
由于B站直接下載的視頻為flv格式,而imageio并不支持,盡管可以用opencv來讀取,但相比之下,用ffmepg轉個碼也不復雜,這樣可以最大限度地利用華強買瓜的代碼。
另外,視頻素材過長不適合代碼演示,所以從第2:10進行截取15s。
在命令行中輸入
>pip install ffmpeg >ffmpeg -i soup.flv -ss 00:02:10 -t 15 seg.mp4 -y很快就得到了seg.mp4,接下來就是讀取視頻并轉為字符,有關這部分代碼的解析,可出門左轉華強買瓜。
import imageio import numpy as np import matplotlib.pyplot as plt video = imageio.get_reader('seg.mp4') imgs = [np.mean(im,2) for im in video] plt.imshow(imgs[30]) plt.show()這個視頻對于字符畫而言太大了,所以轉字符畫之前需對其壓縮。這里采取最簡單的方法——即對相鄰的像素取平均值。
#將圖像寬度縮小至width from itertools import product #用于循環嵌套 def resizeImg(img,w,h=None):m,n = img.shapeif n<w:return imgif 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[30],160) plt.imshow(im) plt.show()接下來生成字符畫,在此使用matplotlib中的text來進行繪制,出于觀感考慮,取消了坐標軸。考慮到字符畫需要寬度一致,故啟用本地字體。
關于繪圖字體,可參考python畫圖時調用本地字體
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)plt.figure(figsize=(8,4.5)) plt.rcParams['font.sans-serif'] = 'SIMSUN' #SIMSUN為宋體 plt.axis([0,10,0,10]) _ = plt.text(5, 5, txt, fontsize=6, linespacing=0.6,ha='center', va='center',wrap=True) plt.gca().set_axis_off() plt.show()結果如下
接下來就是動起來,對于老粉來說這個顯然很簡單,屬于PythonArt這個系列的傳統藝能了。。。
from matplotlib import animation fig = plt.figure(figsize=(8,4.5)) plt.rcParams['font.sans-serif'] = 'SIMSUN' ax = fig.add_subplot(xlim=(0,10),ylim=(0,10)) ax.set_axis_off()text = ax.text(5, 5, txt, fontsize=6, linespacing=0.6, ha='center', va='center',wrap=True)def animate(im):text.set_text(im2txt(im))return [text]imgs = [resizeImg(im,160) for im in imgs]ani = animation.FuncAnimation(fig, animate, imgs[:200], interval=10, blit=True)plt.show()最終得到
總結
以上是生活随笔為你收集整理的python绘制穿山甲字符画视频:这喝汤多是一件美逝的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 康蒂尼药业再次冲刺港股:9个月营收4.4
- 下一篇: js 中编码(encode)和解码(de
