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

OpenCV的安装及图片读取

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

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

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

OpenCV中的一些基础操作

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

(1)灰度转换

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

效果图和原图对比如下:

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

(2)改变图片大小

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

(3)逐帧读取视频

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

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

图片字符化

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

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

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

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

生成如下字符画:

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

视频转字符

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

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

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

本文来自千锋教育,转载请注明出处。

20行Python代码教你让视频字符化相关推荐

  1. python把pdf转word_手把手|20行Python代码教你批量将PDF文件转为Word格式(包教包会)...

    作者:菜鸟分析 Python爱好者社区--专栏作者 个人介绍:一个痴迷于Python语言的业余程序猿,未来的理想是能够与一群痴迷于Python语言的程序猿改变世界 知乎专栏: https://zhua ...

  2. python实现pdf转word详解_手把手|20行Python代码教你批量将PDF文件转为Word格式(包教包会)...

    在日常工作或学习中,经常会遇到这样的无奈: "小任,你把这个PDF中的文件码出来发我" 倒霉,2M的PDF12点也完不了啊! 很多时候在学习时发现许多文档都是PDF格式,PDF格式 ...

  3. 手把手 | 20行Python代码教你批量将PDF转为Word

    2019独角兽企业重金招聘Python工程师标准>>> 在日常工作或学习中,经常会遇到这样的无奈: "小任,你把这个PDF中的文件码出来发我" 艹,倒霉,2M的P ...

  4. python视频压缩算法_Python入门到精通视频,阿里巴巴大力推荐,20行Python代码,无损压缩千百张图片!...

    阿里巴巴推荐,Python基础入门,Python小白书籍,Python学习路线,Python进阶,Python高级,Python爬虫等等一系列关于Python的文档和视频(包括hadoop,fink, ...

  5. python做出来的小程序、可以在win10上面运行_超详细,手把手教你用20行Python代码制作飞花令小程序!...

    原标题:超详细,手把手教你用20行Python代码制作飞花令小程序! 来源:早起Python 作者:陈熹 飞花令是古时候人们经常玩一种"行酒令"的游戏,是中国古代酒令之一,属雅令. ...

  6. 项目分享丨20行Python代码,无损压缩千百张图片!

    前言 每个设计师.摄影师或有图片处理需求小编,都会面临批量高清大图的困扰. 因为高清大图放到网站上会严重拖慢加载速度,或是有的地方明确限制了图片大小,因此,为了完成工作,他们总是需要先把图片压缩,再上 ...

  7. python小游戏代码大全-20行python代码的入门级小游戏的详解

    背景: 作为一个python小白,今天从菜鸟教程上看了一些python的教程,看到了python的一些语法,对比起来(有其他语言功底),感觉还是非常有趣,就随手添了一点内容,改了一个小例程,当着练练手 ...

  8. 聚类 python 代码_不足 20 行 Python 代码,高效实现 k-means 均值聚类算法

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法-1.jpg (143.81 KB, ...

  9. 20行 Python 代码爬取王者荣耀全英雄皮肤 | 原力计划

    作者 | wangweijun 责编 | Elle 出品 | CSDN 博客 引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王 ...

最新文章

  1. 干货丨计算机视觉必读:图像分类、定位、检测,语义分割和实例分割方法梳理(经典长文,值得收藏)
  2. Qt编写OpenMP程序--循环测试
  3. tl wn322g linux驱动下载,TL-WN322G+ 2.0_WN422G+ 2.0驱动程序
  4. Java IO: 字符流的Piped和CharArray
  5. java行情一年比一年差_推动Java前进? 一个定义。 一年回顾。
  6. 爬楼梯 java_Leetcode 70.爬楼梯(Java)
  7. 使用TextRange获取输入框中光标的位置
  8. 学会shell 基本语法,玩转linux
  9. 「代码随想录」322. 零钱兑换 【动态规划】力扣详解!
  10. 例4.5 最小公倍数 - 九度教程第48题(最小公倍数)
  11. IE8 兼容性问题总结
  12. webmax官方动态
  13. c# 指定打开某个路径下的CMD_C# 插入、删除Excel分页符
  14. js 打印去掉页眉页脚页码_JS实现无页眉页脚打印(转)
  15. 计算机的未来展望英语作文,关于展望未来英语作文5篇
  16. html 页面地图不显示图片,Html显示地图 - 切切歆语的个人页面 - OSCHINA - 中文开源技术交流社区...
  17. 初二年级估算要不要用计算机,期中备考:人教版1-6年级上册数学知识要点,抓紧为孩子收藏!...
  18. 解决Failed to open .ini file C:\Users\xxx\.android\emu-update-last-check.ini for writing.
  19. 【面试经历】美团2020秋招测试开发一面二面
  20. 采用DDS设计信号发生器

热门文章

  1. 今晚直播:非自回归神经机器翻译 | PhD Talk #24
  2. 增大iphone音量技巧_原来苹果手机隐藏功能这么好用!调整这个设置,一键增大外放音量...
  3. 【Linux环境】Elasticsearch 启动停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含启停shell脚本)
  4. 安卓点击图片跳转界面_安卓手机APP控制无线开关的电路方案设计(原理图+源码)...
  5. Java实现替换多个字符串中的参数
  6. 操作系统——磁盘寻道练习题及答案
  7. DataGrip 2019.2.5 —— MySQL数据表迁移到SQL Server数据表解决方案
  8. [JSOI2008]星球大战
  9. c++堆内存默认大小_C++|array new 和 array delete的堆内存细节
  10. php并发访问排队_PHP高并发处理方案