前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >「Python案例」字符图像,让字符跳动起来!

「Python案例」字符图像,让字符跳动起来!

原创
作者头像
superhua
修改于 2022-05-15 10:55:58
修改于 2022-05-15 10:55:58
88600
代码可运行
举报
文章被收录于专栏:CNNCNN
运行总次数:0
代码可运行

欢迎关注本文首发公众号:Python学习实战。公众号主要发布Python相关技术文章,分享Python实用案例、面试问答题、Python基础巩固等内容。

关注【Python学习实战】
关注【Python学习实战】

将视频画面全部转为字符,看起来应该比较酷吧...就像下面,输入如下视频:

输入视频
输入视频

输出如下视频:

字符动画效果
字符动画效果

如果不想看技术细节,可以直接跳到文末获取源码运行。

1 彩色图像转字符图

1.1 基本原理

彩色图转字符图,首先将彩色图转为灰度图,灰度图反映的是图像亮度值。利用亮度值,我们可以将不同的字符替换不同的亮度值。基本原理如下所示。

基本原理
基本原理

我们可以提前定义好不同灰度值的对应字符:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
STRING = "Ñ@#W$9876543210?!abc;:+=-,._"

上面字符串从左到右表示亮度越来越亮,当然了,这个字符串不唯一,读者可以根据自己的实际喜好自行设计不同亮度的字符。但有个建议是:

越亮的像素对应的字符应当笔画越少,并且视觉上字符越“空”越好。

对于视频,只需读取每一帧,将每一帧转为字符图,再转回视频即可。

1.2 灰度图转字符图

首先定义一个numpy的二维字符数组,读取每个像素的灰度值,将其转为对应的字符。为了凸显实体,这里将灰度图中越暗区域用越“空”的字符替换,对应的代码实现如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def gray2ascii(gray):
    h, w = gray.shape[0:2]
    ascii_img = np.zeros((h, w), dtype="<U1")
    idxs = np.round(gray / 255.0 * len(STRING))
    idxs = idxs.astype(np.int32)
    for i in range(h):
        for j in range(w):
            ascii_img[i, j] = STRING[-idxs[i, j]]
    return ascii_img

2 提取视频帧

使用opencvVideoCapture对象读取视频帧,每次提取完视频帧后通过callback函数回调。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def extract_frames(video_path, callback):
    video = cv2.VideoCapture(video_path)
    num_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) 
    for _ in tqdm(range(num_frames)):
        _, frame = video.read()
        if frame is not None:
            callback(frame)
        else:
            break

3 帧转视频

每一帧图像经过转换为字符图像后,接下来是写入到视频中,代码如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
WRITER = None 
def write_frame(frame, out_path, fps=30):
    global WRITER
    if WRITER is None:
        size = frame.shape[0:2][::-1]
        WRITER = cv2.VideoWriter(
            out_path,
            cv2.VideoWriter_fourcc(*'mp4v'),  # 编码器
            fps,
            size)
    WRITER.write(frame)

4 源码获取

  1. 关注我的公众号:Python学习实战
  2. 后台回复:字符图。获取完整的字符图转换源码。

如果您觉得本文有帮助,辛苦您点个不需花钱的赞,您的举手之劳将对我提供了无限的写作动力! 也欢迎关注我的公众号:Python学习实战, 第一时间获取最新文章。

关注【Python学习实战】
关注【Python学习实战】

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Python案例】短视频转动漫效果
近日,已使用多年的人教版小学数学教材中的插画引发社会各界人士争议。咱程序员也没有手绘插画能力,但咱可以借助强大的深度学习模型将视频转动漫。本文目标是让任何具有python语言基本能力的程序员,实现短视频转动漫效果。示例效果如下:
superhua
2022/05/29
2.8K8
【Python案例】短视频转动漫效果
利用Python让你的命令行像坤坤一样会打篮球
前言 承接上文,作为一个经常逛b站的肥宅,近期b站上除了流行"品如”素材的视频,更多的莫过于蔡xx打球视频的了,有模仿的,有对比的,有手绘的,更过分的是竟然有人在命令行输出了他的打球视频,地址在:ht
统计学家
2019/05/17
9370
利用Python让你的命令行像坤坤一样会打篮球
Python生成抖音字符视频,技术流!
抖音字符视频在去年火过一段时间。 反正我是始终忘不了那段极乐净土的音乐... 这一次自己也来实现一波,做一个字符视频出来。 主要用到的库有cv2,pillow库。 原视频,直接抖音下载的,妥妥的水印。
一墨编程学习
2019/05/10
1.1K0
Python生成抖音字符视频,技术流!
视频处理系列︱利用达摩院ModelScope进行视频人物分割+背景切换(一)
做了一个简单的实验,利用modelscope的人像抠图模型对视频流进行抠像并更换背景。
悟乙己
2023/01/03
2K0
视频处理系列︱利用达摩院ModelScope进行视频人物分割+背景切换(一)
我用字符画出了一个谷爱凌!
之前经常在网上看到那种由一个个字符构成的视频,非常炫酷。一直不懂是怎么做的,这两天研究了一下,发现并不难。
godweiyang
2022/02/23
3820
我用字符画出了一个谷爱凌!
【计算机视觉】【图像处理综合应用】路沿检测
用python的OpenCV实现视频文件的处理,用videoCapture打开视频文件,读取每一帧进行处理,然后用videoWriter保存成视频。
叶茂林
2023/11/27
4860
【计算机视觉】【图像处理综合应用】路沿检测
Python生成字符视频
在之前也写过生成字符视频的文章,但是使用的是命令行窗口输出,效果不是很好,而且存在卡顿的情况。于是我打算直接生成一个mp4的字符视频。大致思路和之前一样:Python20行代码实现视频字符化。
ZackSock
2021/05/18
5920
Python生成字符视频
【C++】OpenCV:图像视频读取基础操作
这里使用VideoCapture类打开输入视频文件,使用VideoWriter类创建输出视频文件(甚至可以进行格式转换)。
DevFrank
2024/07/24
2680
【C++】OpenCV:图像视频读取基础操作
【Python精彩案例】生成动态二维码
生成动态图需要读取原始gif图并生成新的gif图,即需要读取和保存功能。使用opencv可以轻松读取gif,首先安装opencv库:
superhua
2022/01/14
5630
【Python精彩案例】生成动态二维码
python将视频抽帧的的多种方式
最近有一个需求是将视频抽取为一个个的帧图片,使用python很方便实现,而且有多种方式;
JQ实验室
2022/09/29
3.2K0
opencv︱图片与视频的读入、显示、写出、放缩与基本绘图函数介绍
opencv中读入、显示、写出图片:cv2.imread(), cv2.imshow(), cv2.imwrite()
悟乙己
2019/05/26
5.8K0
Python20行代码实现视频字符化
我们经常在B站上看到一些字符鬼畜视频,主要就是将一个视频转换成字符的样子展现出来。看起来是非常高端,但是实际实现起来确实非常简单,我们只需要接触opencv模块,就能很快的实现视频字符化。但是在此之前,我们先看看我们实现的效果是怎样的:
ZackSock
2020/05/18
8850
Python20行代码实现视频字符化
新年新气象,100行 Python 代码制作动态鞭炮
当初人们燃竹而爆,是为了驱吓危害人们的山魈。据说山魈最怕火光和响声,所以每到除夕,人们便“燃竹而爆”,把山魈吓跑。这样年复一年,便形成了过年放鞭炮、点红烛、敲锣打鼓欢庆新春的年俗。
用户8544541
2022/01/27
7280
新年新气象,100行 Python 代码制作动态鞭炮
[1214]基于Python实现视频去重
一款基于Python语言的视频去重复程序,它可以根据视频的特征参数,将重复的视频剔除,以减少视频的存储空间。它的基本原理是:首先利用Python语言对视频文件进行解析,提取视频的特征参数,如帧率、码率等;然后根据特征参数,生成视频的哈希值;最后,将每个视频的哈希值进行对比,如果哈希值相同,则表示视频内容相同,可以将其中一个视频剔除,以节省存储空间。
周小董
2023/10/10
5990
关于OpenCV for Python入门-图片和摄像头显示
OpenCV和Python结合的学习资料不多,网上的资料更是鱼目混杂,推荐大家OpenCV官方教程中文版 for Python,建议自行下载。
python与大数据分析
2022/04/02
1.4K0
关于OpenCV for Python入门-图片和摄像头显示
一段蛋疼的代码:超不清视频播放器
今天分享的这段代码,看起来没啥实际用处,而且有些反潮流,因为现如今大家看视频都追求更高分辨率的超清画质,而我们这个,是一个“超不清”的视频播放器:
Crossin先生
2018/12/17
8600
OpenCV基础 | 2.图像,视频的加载与保存
数字图像由二维元素组成,每一个元素具有一个特定位置(x,y)和幅值f(x,y),这些元素就称为像素
快学Python
2021/08/09
1.1K0
python实战篇(三)---放慢视频VS图像添加文字
前面我们对图像和视频的读取进行了实操,今天我们继续来学习它们的处理-------放慢视频VS图像添加文字,学会今天的项目,你将会进入新的境界。
用户5410712
2022/06/01
7490
python实战篇(三)---放慢视频VS图像添加文字
03: 打开摄像头
学习打开摄像头捕获照片、播放本地视频、录制视频等。图片/视频等可到文末引用处下载。
CodecWang
2021/12/07
1.9K0
让AI帮助黑白影像焕发色彩
该项目基于Richard Zhang,Phillip Isola和Alexei A. Efros在加州大学伯克利分校开发的研究工作:彩色图像着色
代码医生工作室
2019/06/21
8540
让AI帮助黑白影像焕发色彩
推荐阅读
相关推荐
【Python案例】短视频转动漫效果
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验