实战 | 抖音百万点赞:视频的字符化

1.项目介绍

在聊视频的字符化处理之前,我们先看一下图像的字符化处理。

什么是图像的字符化,我们可以先看一下下面的两幅图,原图和字符化之后的图像:
原始图片中的像素变成了用ASCII码组成的图像

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不断读取一帧一帧的视频内容,然后转换为字符串,接下来通过命令行不断打印出转换后得到的字符串,最后再配上对应的音乐,就可以发抖音啦!

下面是我对抖音一个千万次点赞视频做的简单的字符化处理,可以看下。

(微信后台上传视频被压缩,不太清晰,见谅)
抖音超火字符化视频

项目打包

图像字符化项目
https://pan.baidu.com/s/1nbtk9Nru_o625ajkOGWgag
提取码:f5e9

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章