通过python绘制华强买瓜的字符画视频的步骤详解
作者:微小冷 发布时间:2022-03-01 05:42:43
标签: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
完整代码
来源:https://blog.csdn.net/m0_37816922/article/details/121296343
0
投稿
猜你喜欢
- set转成list方法如下: list转成set方法如下:s = set('12342212') &n
- 首先来看一下代码:chars = "abcd"tmp = []for char in chars: tmp.append
- 很多人都有研究闭合浮动元素的问题,但是解决方法却不一样,也并不是每一种方法都尽善尽美。闭合浮动元素(或者叫清除浮动)是web标准设计中经常会
- DB2 存储过程:基础知识您在客户端工作站上对远程服务器和位于该服务器上的数据库进行分类的任何时候,都存在一个简单的 DB2 客户端/服务器
- PyQuery库就是python中的一个解析库。作用十分强大,使用上也是相当的灵活,能够实现初始化字符串、初始化 HTML 文件、初始化请求
- 本文实例讲述了python自动zip压缩目录的方法。分享给大家供大家参考。具体实现方法如下:这段代码来压缩数据库备份文件,没有使用pytho
- 随着网络的普及,基于网络的应用也越来越多。网络数据库就是其中之一。通过一台或几台服务器可以为很多客户提供服务,这种方式给人们带来了很多方便,
- 本文实例为大家分享了python爬虫爬取淘宝商品的具体代码,供大家参考,具体内容如下1、需求目标 : 进去淘宝页面,搜索耐克关键词,抓取 商
- 短几年,Google 的 Logo 已经象 Nike 的挑勾和 NBC 的孔雀图案一样著名了。Ruth Kedar,Google
- 目录前言1. 使用Lambda来修改Pandas数据框中的值2. 使用f-string来连接字符串3. 用Zip()函数对多个列表进行迭代4
- 我们都知道ACCESS是ASP的亲密伙伴。因为两种最简单的东西碰在一起总能迸发出火花。然而,当我们过滤不严格的时候经常出现日文字符,这个时候
- vi /etc/freetds/freetds.conf [global]# TDS protocol versiontds version
- 把一些地域性比较明显的数据显示在一张地图上,远比给别人一个 Excel 文件好得多。Matplotlib 中也有画地图的函数,但是是静态图,
- 下标所谓下标就是编号,就好比超市中存储柜的编号,通过这个编号就能找到相应的存储空间。Python中字符串,列表,元祖均支持下标索引。例如:#
- 本文作为属性篇的最后一篇文章, 将讲述HTML和CSS的关键—盒子模型(Box model). 理解Box model的关键便是margin
- 上篇文章给大家介绍了Python爬虫实现百度翻译功能过程详解Python爬虫学习之翻译小程序 感兴趣的朋友点击查看。今天给大家介
- 获取DataFrame虽然是一个比较简单的操作,但是有时候到手边就是写不出来,所以在这里总结记录一下:1.链表推倒式data =
- SQL Server创建临时表:创建临时表 方法一: &n
- 自定义模板403<!DOCTYPE html><html lang="en"><head&
- 从人类认知的角度的看,人类擅长识别并不擅长于记忆,当一个用户面对浩瀚的信息海洋,通常会产生畏惧感,会本能的对这些信息片段进行加工找出其内在的