网易首页 > 网易号 > 正文 申请入驻

20行Python代码实现视频字符化

0
分享至

  来源 |ZackSock(ID:ZackSock)

  我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来。

  看起来是非常高端,但是实际实现起来确实非常简单,我们只需要接触opencv模块,就能很快的实现视频字符化。但是在此之前,我们先看看我们实现的效果是怎样的:

  在这里插入图片描述

  上面就是截取的一部分效果图,下面开始进入我们的主题。

  OpenCV的安装及图片读取

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

  pipinstallopencv-python

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

  importcv2 im=cv2.imread('jljt')#读取图片 cv2.imshow('im',im)#显示图片 cv2.waitKey(0)#等待键盘输入 cv2.destroyAllWindows()#销毁内存

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

OpenCV中的一些基础操作

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

  (1)灰度转换

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

  importcv2 #读取图片 im=cv2.imread('jljt.jpg') #灰度转换 grey=cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)

  效果图和原图对比如下:

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

  (2)改变图片大小

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

  importcv2 #读取图像 im=cv2.imread('jljt.png') #改变图像大小 re=cv2.resize(im,(100,40)) cv2.imshow('11',re) cv2.waitKey(0) cv2.destroyAllWindows()(3)逐帧读取视频

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

  importcv2 #读取视频 video=cv2.VideoCapture('jljt.mp4') #读取帧,该方法返回两个参数,第一个为是否还有下一帧,第二个为帧的ndarray对象 ret,frame=video.read() whileret: #循环读取帧 ret,frame=video.read()

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

图片字符化

  对于只有一个通道的图片,我们可以把它当成一个矩形,这个矩形最小单位就是一个像素。而字符化的过程就是用字符替代像素点的过程。所以我们要遍历图像的每个像素点,但是我们应该用什么字符取代呢?

  我们颜色有一个参照表,而opencv将这个参数表切割成256份,代表不同的程度,我们也可以做一个参照表,不过表中的内容不是颜色,而是字符。

  颜色表

  上图为颜色表,我们可以使颜色表和字符表建立映射关系。假如字符表如下:

  mqpka89045321@#$%^&*()_=||||}

  我们可以得到下列公式:

  颜色和字符之间的等式

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

  获取字符在字符表中的位置

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

  importcv2 str='mqpka89045321@#$%^&*()_=||||}'#字符表 im=cv2.imread('jljt.jpg')#读取图像 grey=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)#灰度转换 grey=cv2.resize(grey,(50,18))#缩小图像 str_img=''#用于装字符画 foriingrey:#遍历每个像素 forjini: index=int(j/256*len(str))#获取字符坐标 str_img+=str[index]#将字符添加到字符画中 str_img+='\n' print(str_img)

  生成如下字符画:

  字符画

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

视频转字符

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

  importos importcv2 str='mqpka89045321@#$%^&*()_=||||}'#字符表 video=cv2.VideoCapture('jljt.mp4')#读取视频 ret,frame=video.read()#读取帧 whileret:#逐帧读取 str_img=''#字符画 grey=cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)#灰度转换 grey=cv2.resize(grey,(100,40))#该表大小 foriingrey:#遍历每个像素点 forjini: index=int(j/256*len(str))#获取字符坐标 str_img+=str[index]#将字符添加到字符画中 str_img+='\n' os.system('cls')#清除上一帧输出的内容 print(str_img)#输出字符画 ret,frame=video.read()#读取下一帧 cv2.waitKey(5)

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

  最终效果

  
在选取字符表时我们需要注意主体的颜色,如果主体颜色较浅,则字符表的尾部应该为一些复杂字符,如:$%#@&。字符表头部为一些简单字符,如:-|/等。如果主体颜色较深,而背景颜色较浅,则反之。当然这没有唯一的标准,大家可以慢慢调节。感兴趣的读者,可以关注我的个人公众号:ZackSock,看到抠鼻屎的就是我没错了。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
摩洛哥国门布努谈梅西:罚丢点球后反而更可怕,他是全新蜕变的球王

摩洛哥国门布努谈梅西:罚丢点球后反而更可怕,他是全新蜕变的球王

体育闲话说
2026-07-11 07:17:23
海莉·比伯晒1岁儿子独立走路照!迈出人生第一步,萌翻全网

海莉·比伯晒1岁儿子独立走路照!迈出人生第一步,萌翻全网

自愈小日子
2026-07-09 00:42:17
官媒曝光!成本5.5元卖788元,暴利百倍!网友:智商税

官媒曝光!成本5.5元卖788元,暴利百倍!网友:智商税

趣文说娱
2026-07-10 03:38:15
还是中锋?官方:开拓者认领迈卡-波特,上赛季三分42.3%

还是中锋?官方:开拓者认领迈卡-波特,上赛季三分42.3%

懂球帝
2026-07-11 08:43:10
北大韦神最新照片,形象大变化,官宣好消息

北大韦神最新照片,形象大变化,官宣好消息

微微热评
2026-07-10 14:39:24
随着山东泰山4-3,中超最新积分榜出炉

随着山东泰山4-3,中超最新积分榜出炉

侧身凌空斩
2026-07-10 21:39:32
陈忠和现状:在福建老家养老,女儿成家立业,30岁儿子仍是单身

陈忠和现状:在福建老家养老,女儿成家立业,30岁儿子仍是单身

手工制作阿歼
2026-07-11 01:11:25
被科学界判为耻辱柱之作,这部烂片靠什么在22年后复活?

被科学界判为耻辱柱之作,这部烂片靠什么在22年后复活?

字节漫游指南
2026-07-10 00:35:46
女生长的太漂亮是什么体验?网友:母以子贵,父以女荣

女生长的太漂亮是什么体验?网友:母以子贵,父以女荣

另子维爱读史
2026-03-10 22:56:08
天津发布地质灾害红色预警

天津发布地质灾害红色预警

界面新闻
2026-07-10 16:23:54
7月9日汪小菲台北直播坦诚表态!终于公开小玥儿回京上学真实安排

7月9日汪小菲台北直播坦诚表态!终于公开小玥儿回京上学真实安排

陈意小可爱
2026-07-10 19:50:49
弃用阿森纳王牌!英格兰名宿硬刚图赫尔!世界杯战挪威别再上他

弃用阿森纳王牌!英格兰名宿硬刚图赫尔!世界杯战挪威别再上他

澜归序
2026-07-11 03:02:21
马斯克有句话点醒过我“如果今天我破产了,绝对不会去找工作,而是去做一件能快速产生现金流,并且可以复制放大的事。”

马斯克有句话点醒过我“如果今天我破产了,绝对不会去找工作,而是去做一件能快速产生现金流,并且可以复制放大的事。”

LULU生活家
2026-07-07 20:59:47
世界杯黑马门将回佛得角度假,沃齐尼亚骑水上摩托,传有望加盟迈阿密国际

世界杯黑马门将回佛得角度假,沃齐尼亚骑水上摩托,传有望加盟迈阿密国际

红星新闻
2026-07-10 11:23:31
重磅!小卡被强行退货!又是阴阳合同惹的祸!快船迎回当代乔丹?

重磅!小卡被强行退货!又是阴阳合同惹的祸!快船迎回当代乔丹?

生活新鲜市
2026-07-10 15:09:07
7月起8款慢病药不再走医保统筹,常年服药家庭别白跑药店

7月起8款慢病药不再走医保统筹,常年服药家庭别白跑药店

小虎新车推荐员
2026-07-10 18:21:20
广东一高校宣布:逐步取消大学英语课,改上跨文化交流课程

广东一高校宣布:逐步取消大学英语课,改上跨文化交流课程

南方都市报
2026-07-10 23:20:03
反转!广东新娘和堂姐互撕最新后续:堂姐曝完整经过,拉黑不原谅

反转!广东新娘和堂姐互撕最新后续:堂姐曝完整经过,拉黑不原谅

凉羽亭
2026-07-11 04:53:52
比利时球迷建网站给鲁迪-加西亚道歉,现已有近1.1万人留言

比利时球迷建网站给鲁迪-加西亚道歉,现已有近1.1万人留言

懂球帝
2026-07-10 20:21:10
《九个弹孔》直到邓向荣自杀,李智信才发现,潘祖望出卖他的真相

《九个弹孔》直到邓向荣自杀,李智信才发现,潘祖望出卖他的真相

情感大头说说
2026-07-11 06:38:44
2026-07-11 08:59:00
AI科技大本营 incentive-icons
AI科技大本营
连接AI技术的创造者和使用者
2745文章数 7716关注度
往期回顾 全部

科技要闻

苹果起诉OpenAI系统性窃密,挖超400前员工

头条要闻

网红二手车商自称破产 数十家车商上门讨钱:有1900万

头条要闻

网红二手车商自称破产 数十家车商上门讨钱:有1900万

体育要闻

法国VS摩洛哥:谁才是臭外地的?

娱乐要闻

韩国顶流李钟硕与IU官宣分手!

财经要闻

一封举报信 引发小红书IPO合规考验

汽车要闻

吉利银河TT:C级纯电轿跑新玩家 此TT非彼TT

态度原创

本地
家居
教育
公开课
军事航空

本地新闻

重庆人有自己的避暑桃花源 | 夏天就去「酉」风的地方!

家居要闻

2026建博会(广州) 公装联探展交流活动

教育要闻

致教师:不要在心里养一条毒蛇

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

以色列:已做好打击伊朗的准备

无障碍浏览 进入关怀版