Python 视频转字符画 - 进阶

昨晚我在网上看到了别人做的视频转字符动画,觉得很厉害,我于是也打算玩玩。今天中午花时间实现了这样一个小玩意。

顺便把过程记录在这里。

1.源视频:

2.转换后:

步骤

1、将视频转化为一帧一帧的图片

2、把图片转化为字符画

3、按顺序播放字符画

一、准备

1、模块

这个程序需要用到这样几个模块:

1. opencv-python #用来读取视频和图片

2. numpy # opencv-python依赖于它

准备阶段,首先安装依赖: .

pip3 install numpy opencv-python

然后新建python代码文档,在开头添加上下面的导入语句

#-*- coding:utf-8 -*-

# numpy 是一个矩阵运算库,图像处理需要用到。

import numpy as np

2、材料

材料就是需要转换的视频文件了,下载下来和代码放到同一目录下,你也可以换成自己的,建议是学习时尽量选个短一点的视频,几十秒就行了,不然调试起来很痛苦。(或者自己稍微修改一下函数,只转换一定范围、一定数量的帧。)此外,要选择对比度高的视频。否则的话,就需要彩色字符才能有足够好的表现,有时间我试试。

二、按帧读取视频

现在继续添加代码,实现第一步:按帧读取视频。

下面这个函数,接受视频路径和字符视频的尺寸信息,返回一个img列表,其中的img是尺寸都为指定大小的灰度图。

#导入 opencv

import cv2

def video2imgs(video_name, size):

"""

:param video_name: 字符串, 视频文件的路径

:param size: 二元组,(宽, 高),用于指定生成的字符画的尺寸

:return: 一个 img 对象的列表,img对象实际上就是 numpy.ndarray 数组

"""

img_list = []

# 从指定文件创建一个VideoCapture对象

cap = cv2.VideoCapture(video_name)

# 如果cap对象已经初始化完成了,就返回true,换句话说这是一个 while true 循环

while cap.isOpened():

# cap.read() 返回值介绍:

# ret 表示是否读取到图像

# frame 为图像矩阵,类型为 numpy.ndarry.

ret, frame = cap.read()

if ret:

# 转换成灰度图,也可不做这一步,转换成彩色字符视频。

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

# resize 图片,保证图片转换成字符画后,能完整地在命令行中显示。

img = cv2.resize(gray, size, interpolation=cv2.INTER_AREA)

# 分帧保存转换结果

img_list.append(img)

else:

break

# 结束时要释放空间

cap.release()

return img_list

写完后可以写个main方法测试一下,像这样:

if __name__ =&#

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值