教程简介:本教程使用 OpenCV 处理图片视频,将视频转为字符画序列,再在终端中播放字符动画。除了 OpenCV 的操作,本教程还会了解光标定位转义编码的使用。
本项目教程由FrostSigh发布在实验楼,完整教程及在线练习地址:Python3 & OpenCV 视频转字符动画
一、项目简介
在介绍如何用 Python3 & OpenCV 将视频转成字符动画之前,先简单的介绍一下 OpenCV 吧,毕竟可能很多小伙伴不太了解:
百度百科:OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
1.1. 知识点OpenCV 编译
使用 OpenCV 处理图片、视频
图片转字符画原理
守护线程
光标定位转义编码
1.2. 效果展示
接着来看看效果展示,很可爱又很酷炫:(动画截图)
播放停止后的效果,注意终端中并无残留的动画字符:
二、项目原理
大家应该都明白视频其实可以看作一系列图片组成的,因此视频转字符动画最基本的便是图片转字符画,这一部分内容也在 Python 图片转字符画 课程中有讲过。
在这里简单的说一下图片转字符画的原理:首先将图片转为灰度图,每个像素都只有亮度信息(用 0~255 表示)。然后我们构建一个有限字符集合,其中的每一个字符都与一段亮度范围对应,我们便可以根据此对应关系以及像素的亮度信息把每一个像素用对应的字符表示,这样字符画就形成了。
字符动画要能播放才有意义。最最简单粗暴的,用文本编辑器打开字符动画文本文件,然后狂按 PageDown 键就能播放。然而这真的太简单太粗暴了,一点都不优雅。
我们还是在终端里面播放字符动画,只需要一帧一帧输出就能达到动画的效果了,然而这却有一个很大的弊端:播放时,你会发现终端右边的滚动条会越来越小(如果有的话);播放完毕后,在终端中往上翻页,全是之前输出的字符画,播放前的命令历史全部被挤占掉了。在本实验后面提供了这个问题的解决办法。
三、实验环境及OpenCV的编译安装
在线练习环境:
实验楼为本项目提供了在线环境。本课程的实验中使用了 OpenCV 3.1,因此我们需要编译安装它。首先我们需要处理一个问题:当前实验楼的环境中 python3 命令使用的 python 版本为 3.5,我们需要将 python3 命令使用的 python 版本切换为 3.4。
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.4 70 --slave /usr/bin/python3m python3m /usr/bin/python3.4m
然后安装一些依赖的包:
$ sudo apt-get update
$ sudo apt-get install python3-dev
$ sudo pip3 install numpy
$ sudo apt-get install cmake libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
现在可以开始编译 OpenCV 3.1 了,下面是在实验楼环境中编译 OpenCV 3.1 所需的命令,其他环境中的编译请参考官网。
$ wget https://github.com/Itseez/opencv/archive/3.1.0.zip
$ unzip 3.1.0.zip && cd opencv-3.1.0/
$ mkdir build && cd build
$ cmake -D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
PYTHON3_EXECUTABLE=/usr/bin/python3 \
PYTHON_INCLUDE_DIR=/usr/include/python3.4 \
PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.4m.so \
PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.4/dist-packages/numpy/core/include ..
$ make -j4
不想自己编译的同学请下载编译好的二进制文件,然后解压并进入 opencv-3.1.0/build 目录。
本项目的完整代码、详细步骤及demo,可以在实验楼查看并在线完成:Python3 & OpenCV 视频转字符动画
更多Python经典项目:Python全部 - 课程