通过python绘制华强买瓜的字符画视频的步骤详解
已经11月了,不知道还有没有人看华强买瓜。。。要把华强卖瓜做成字符视频,总共分为三步
- 读取视频
- 把每一帧转为字符画
- 把字符画表现出来
读取视频
通过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 #用于循环嵌套 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内置的模块实现——即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华强买瓜字符画视频内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
浅析python 中__name__ = ''__main__'' 的作用
这篇文章主要介绍了python 中__name__ = '__main__' 的作用,对于初学者来说很有帮助,需要的朋友可以参考下2014-07-07python+selenium+autoit实现文件上传功能
这篇文章主要介绍了python+selenium+autoit实现文件上传功能,需要的朋友可以参考下2017-08-08详解如何使用Python的Plotly库进行交互式图形可视化
Python中有许多强大的工具和库可用于创建交互式图形,其中之一就是Plotly库,Plotly库提供了丰富的功能和灵活的接口,使得创建各种类型的交互式图形变得简单而直观,本文将介绍如何使用Plotly库来创建交互式图形,需要的朋友可以参考下2024-05-05python 实现多线程下载m3u8格式视频并使用fmmpeg合并
这篇文章主要介绍了python 实现多线程下载m3u8格式视频,使用fmmpeg合并的实例代码,需要的朋友可以参考下2019-11-11Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
这篇文章主要介绍了Python基于递归和非递归算法求两个数最大公约数、最小公倍数,涉及Python递归算法、流程循环控制进行数值运算相关操作技巧,需要的朋友可以参考下2018-05-05numpy中np.dstack()、np.hstack()、np.vstack()用法
numpy里dstack, hstack, vstack, 都有拼接的作用,本文详细的介绍了np.dstack()、np.hstack()、np.vstack()用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2022-03-03
最新评论