千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

首页 视频教程 培训课程 师资团队 技术干货 常见问题 面试题 职场就业 零基础学Python 行业资讯
【热点话题】 Python技术干货 Python学习教程 Python学习笔记 Python面试题 Python培训问答 Python培训机构哪些好 Python职场就业
当前位置:Python培训  >  Python技术干货  >  20行Python代码教你让视频字符化

20行Python代码教你让视频字符化

来源:千锋教育
发布人:小千
时间: 2020-12-31 09:18:00 1609377480

我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来。看起来是非常高端,但是实际实现起来确实非常简单,我们只需要接触opencv模块,就能很快的实现视频字符化。

OpenCV的安装及图片读取

在Python中我们只需要用pip安装即可,我们在控制台执行下列语句:

1

安装完成就可以开始使用。我们先读取一个图片:

2

首先我们使用cv2.imread方法读取图片,该方法返回一个ndarray对象。然后调用imshow方法显示图像,调用后会出现一个窗口,因为这个窗口只会出现一瞬间,所以我们调用waitKey等待输入,传入0表示无限等待。因为opencv是使用c++编写的,所以我们需要销毁内存。

OpenCV中的一些基础操作

我们将视频字符化的思路就是先将视频转换为一帧一帧的图像,然后对图像进行字符化处理,最后展示出来就是字符视频的效果了。在我们生成字符画之前,我们还要看一些OpenCV的操作。

(1)灰度转换

灰度处理是一个非常常用的操作,我们原始的图片是有BGR三个图层(在OpenCV中,图像是以BGR形式读取)。我们进行灰度处理直观上看就是将图片变成黑白,而本质上是将图片的三个图层通过计算,变成一个图层。而这种计算是不需要我们做的,我们只需要调用OpenCV中的函数即可:

3

效果图和原图对比如下:

4

左边为原图,右边为灰度转换后的图像。

(2)改变图片大小

因为字符化后图像会比较大,所以我们需要先缩小图片,我们调用cv2.resize即可改变图像大小:

5

(3)逐帧读取视频

我们可以通过VideoCapture读取视频,然后调用其中的方法读取每一帧。

6

有了上面的操作,我们就可以开始我们下一步的工作了。

图片字符化

 

对于只有一个通道的图片,我们可以把它当成一个矩形,这个矩形最小单位就是一个像素。而字符化的过程就是用字符替代像素点的过程。所以我们要遍历图像的每个像素点,但是我们应该用什么字符取代呢?我们颜色有一个参照表,而opencv将这个参数表切割成256份,代表不同的程度,我们也可以做一个参照表,不过表中的内容不是颜色,而是字符。

7

上图为颜色表,我们可以使颜色表和字符表建立映射关系。假如字符表如下:mqpka89045321@#$%^&*()_=||||}我们可以得到下列公式:

8

经过变换可以求得相应颜色对应字符表中的字符:

9

这个公式不理解也没关系,只需要会用即可。下面就是我们完整的代码了:

10

生成如下字符画:

11

因为尺寸比较小的关系,看出来的效果不是很好,我们调节好大小就好了。

视频转字符

我们知道图片转字符,自然视频转字符就不是什么问题了,我们只需要在逐帧读取中执行图片字符化操作即可。

12

这样我们就会每个5毫秒执行一帧画面,在我们使用pycharm执行时,会发现并没有执行清屏操作,所以我们需要到命令行运行。最终效果就是我们的字符视频了

在选取字符表时我们需要注意主体的颜色,如果主体颜色较浅,则字符表的尾部应该为一些复杂字符,如:$%#@&。字符表头部为一些简单字符,如:-|/等。如果主体颜色较深,而背景颜色较浅,则反之。当然这没有唯一的标准,大家可以慢慢调节。

最后欢迎大家添加我们的Python技术开发交流qq群,加群找群管理要学习资料和项目代码,Python技术交流qq群:790693323 等你来哦~~~

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

最新文章NEW

相关推荐HOT

更多>>