日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python绘制穿山甲字符画视频:这喝汤多是一件美逝

發布時間:2024/1/8 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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绘制穿山甲字符画视频:这喝汤多是一件美逝的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。