1.项目介绍
在聊视频的字符化处理之前,我们先看一下图像的字符化处理。
什么是图像的字符化,我们可以先看一下下面的两幅图,原图和字符化之后的图像:
2.pillow模块介绍
想要完成这个应用我们需要安装一个python工具包,pillow。
安装方式为:
pip install pillow
pillow是python中一个常用的图像处理工具包,一些pillow的基本操作如下:
# 导入模块
from PIL import Image
# 读取文件
img = Image.open('test.jpg')
# 保存文件
img.save(filename,"JPEG")
# 获取图片大小
(width,height) = img.size
# 获取图片的源格式
img_format = img.format
# 图片模式的转换,转化成灰度图像
img = img.convert("L")
# 获取每个坐标的像素点的RGB值
r,g,b = img.getpixel((j,i))
# 重设图片大小
img = img.resize(width,height)
3.图像字符化程序
把图像字符化实际上就是先把图像灰度化,把彩色图片变为灰度图,然后获取到每个像素点的数值,然后不同数值的像素对应不同的ACSII码字符。我封装了一个convert函数,只要传入图片路径就可以返回生成的字符化的数据,得到图片字符化之后的数据可以保存到文本文件中。
# 导入模块
from PIL import Image
# 转换函数
def convert(img):
# 要索引的字符列表
ascii_char =
list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~ <>i!lI;:,\"^`'. ")
# 字符长度
length = len(ascii_char)
# 读取图像文件
img = Image.open(img)
# 获得图片的宽和高
(width,height) = img.size
# 对图像进行一定缩小
img = img.resize
((int(width*0.16),int(height*0.08)))
# 转为灰度图像
img = img.convert("L")
txt = ""
for i in range(img.size[1]):
for j in range(img.size[0]):
# 获取每个坐标像素点的灰度
gray = img.getpixel((j, i))
# 获取对应坐标的字符值
unit = 256.0 / length
txt += ascii_char[int(gray / unit)]
txt += '\n'
return txt
# 传入需要转换的原始图片
txt = convert('test.jpg')
# 把转换后的字符存入txt文件
f = open("convert.txt","w")
f.write(txt)
f.close()
4.更进一步,视频图像字符化
既然图像可以字符化,那么视频是由一帧一帧的图像组成的,自然也可以实现字符化的效果。
可以使用opencv不断读取一帧一帧的视频内容,然后转换为字符串,接下来通过命令行不断打印出转换后得到的字符串,最后再配上对应的音乐,就可以发抖音啦!
下面是我对抖音一个千万次点赞视频做的简单的字符化处理,可以看下。
(微信后台上传视频被压缩,不太清晰,见谅)
抖音超火字符化视频
项目打包
关注公众号:X人工智能学院
后台回复 :1109 领取项目资料包(可直接运行)