文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python绘制字符画视频的示例代码怎么写

2023-06-25 15:35

关注


 读取视频

通过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()

python绘制字符画视频的示例代码怎么写

转为字符

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

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

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)print(txt)

结果如下

python绘制字符画视频的示例代码怎么写

动画

让命令行绘制字符视频,听上去可能有些不可思议,但这个功能可以仅凭python内置的模块实现——即curses,唯一可惜的是,Windows下的Python并不内置这个模块,需要额外安装。

先下载和自己python版本相符的curses,然后通过pip命令安装

>pip install "curses-2.2.1+utf8-cp310-cp310-win_amd64.whl"

然后就可以在python中调用了。由于视频太大,所以这里只演示一小段,效果如下

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


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯