资讯专栏INFORMATION COLUMN

通过python绘制华强买瓜的字符画视频

sushi / 1900人阅读

摘要:文章目录读取视频转为字符动画已经月了,不知道还有没有人看华强买瓜。。。要把华强卖瓜做成字符视频,总共分为三步读取视频把每一帧转为字符画把字符画表现出来读取视频通过读取视频,除了之外,还需要。

已经11月了,不知道还有没有人看华强买瓜。。。要把华强卖瓜做成字符视频,总共分为三步

  1. 读取视频
  2. 把每一帧转为字符画
  3. 把字符画表现出来

读取视频

通过imageio读取视频,除了pip install imageio之外,还需要pip install imageio-ffmpeg

由于视频中的图像都是彩色的,故而需要将rgb三色转为单一的强度,并将转化后的图像装入一个列表中。

import imageioimport numpy as npimport matplotlib.pyplot as pltvideo = imageio.get_reader("test.mp4")imgs = []for img in video:    imgs.append(np.mean(img,2))plt.imshow(imgs[0])plt.show()

转为字符

这个视频虽然已被压缩,但对于字符画而言还是太大了,所以转字符画之前需对其进一步压缩。这里采取最简单的方法——即对相邻的像素取平均值。

#将图像宽度缩小至widthfrom 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

完整代码

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123313.html

相关文章

  • 只要5秒就能“克隆”本人语音!美玉学姐不再查寝,而是吃起了桃桃丨开源

    摘要:支持格式,噪音等干扰尽可能低上传完录音后,选择需要的合成器声码器,然后在文本框中输出想要合成的语音文本,等待一会儿。业内已经成熟的技术可以实时克隆语音的还有近期的小冰发布会,这都使对语音合成产生了极大的兴趣。 博雯 萧箫 发自 凹非寺量子位 报道 | 公众号 QbitAI 现在,AI已经...

    mozillazg 评论0 收藏0
  • Rasa2.x机器人实现《买瓜》完整代码

    摘要:吸铁石另外你说的这瓜要是生的你自己吞进去啊。机器人答句两块钱一斤你瞧瞧这现在哪有瓜呀这都是大棚的瓜,你贤惠我还贤惠呢。 结果 第一次安装 参考https://ra...

    cangck_X 评论0 收藏0
  • 超不清视频播放器-用Python视频转成字符

    摘要:一幅图像全部转成字符序列后,就可以直接在控制台输出了。读取视频使用了,并直接用它提供的方法转了灰度图,在之前的文章中也有过介绍,计算机视觉开发利器这一步比较重要,因为有的视频分辨率很高,直接一个像素转一个字符的话量太大,所以先缩小图片。 今天分享的这段代码,看起来没啥实际用处,而且有些反潮流,因为现如今大家看视频都追求更高分辨率的超清画质,而我们这个,是 一个超不清的视频播放器 : 在...

    DobbyKim 评论0 收藏0
  • Python易学就会(五)turtle绘制椭圆与递归

    摘要:现实生活中,有很多图形是非常有规律性的,这样的图形如果使用递归算法来实现,程序就会非常简洁,运行效果也会很好。下面我们来用画一棵树,感受一下中的递归算法和的克隆功能。   前两篇文章基本涵盖了turtle的大部分功能,同时也借由对turtle功能的展示,厘清了Python的一些语法特点,以利于新手入门。但是短短几个例子,阐述得还是有限,这里再展开两个知识点,一方面对turtle做个补遗...

    lk20150415 评论0 收藏0
  • Python易学就会(四)turtle绘图入门--高级篇

    摘要:也就是说明这个参数除了表示圆的半径面,其正负性还定义了画圆的方向。入门篇中有个小彩蛋,也就是可以修改的指针外形。通过初始化出多只新,可以同时在一个界面上以不同的绘图。下面给出一段绘制实时时钟的代码,重点部分我已给出注释。   到目前为止我们通过turtle库了解了Python的基本语法,包括顺序与循环、函数的调用与方法的定义、列表与简单的数学运算等;也学习了用turtle库绘图的基本用...

    Miracle 评论0 收藏0

发表评论

0条评论

sushi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<