[源码分享]视频转字符动画,50行代码搞定
C语言题库
共 2624字,需浏览 6分钟
· 2022-11-21
1 视频转字符动画
在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生活的一分,越来越多的人使用计算机办公、娱乐等等。可以把视频转成动起来的动画哦~视频背景最好颜色单调一点
2 背景知识
视频转字符动画其实很简单,首先需要了解图片在内存里面是怎么存储的,然后对每一个像素点进行操作,转成相应的字符,输出到屏幕上即可。
表白程序设计原理:
第一步,配置OpenCV和easyx环境,配置easyx主要是为了显示字符动画时流畅的显示(如果不使用,直接输出到控制待也是可以的)
第二步,准备好不同颜色需要替换的字符
第三步,打开视频,逐帧获取图片,并转成灰度图
第四步,获取到图片的每个像素点的颜色值
第五步,然后根据颜色值得比例转成字符输出即可
3 错误及解决方案
此程序使用Vs209+OpenCV+easyx开发。刚开始学习C语言或者没接触过OpenCV和easyx的伙伴,拿到代码之后肯定有很多的错误,这就是所谓的给了源码也不能运行,所以配置环境和查看报错也是作为编程学习者,必须要掌握的技能。
vs安装使用教程:[点击查看教程]
OpenCV安装使用教程:[点击查看教程]
easyx安装使用教程:[点击查看教程]
4. 话不多说上代码
先看代码,然后自己去敲代码练习哦~
#include<opencv2/opencv.hpp>
#include<iostream>
#include<Windows.h>
#include<mmsystem.h>
#include<graphics.h>
#include<string>
#pragma comment(lib,"winmm.lib")
using namespace cv;
using namespace std;
int main()
{
initgraph(960, 640);
VideoCapture mvideo("./极乐净土.mp4");
mciSendString("open ./干坤坤.mp3 alias bgm", 0, 0, 0);
const char* str = "@#$%&eb!*,';+^~. = ";
int len = strlen(str);
BeginBatchDraw();
while (1)
{
Mat frame;//视频帧
mvideo >> frame;//获取每一张图片
if (frame.empty())//如果读完就退出
break;
cvtColor(frame, frame, COLOR_BGR2GRAY);
resize(frame, frame, Size(150, 50));
String text;//保存转换后的字符串
cleardevice();
int index = 0;
//遍历图片像素的行和列
for (int x = 0; x < frame.rows; x++)
{
for (int y = 0; y < frame.cols; y++)
{
int grayval = frame.at<uchar>(x, y);
index = grayval / 256.0 * len;//通过颜色比例,把颜色转成字符
text += str[index];
}
settextstyle(10, 0, "楷体");
outtextxy(0, x * textheight(str[index]), text.data());//逐行输出
text.clear();//每一行清除一次
}
imshow(" ", frame);
int key = cv::waitKey(10);
if (key == 32)//按空格退出
break;
mciSendString("play bgm", 0, 0, 0);
FlushBatchDraw();
}
cv::waitKey(0);
return 0;
}
评论
会写代码的总理!全球第一“开源”名门望族
转自:OSC开源社区4 月 15 日,新加坡总理公署发表声明宣布,总理李显龙将于 5 月 15 日辞职,并正式交棒给副总理兼财政部长黄循财。对于李氏家族下一代是否会继续活跃在新加坡政坛,目前外界说法不一。但在开源圈里,李氏家族绝对有一席之地。李显龙有 4 名子女,其本人、次子,以及幼子都有非常专业的
开源前哨
0
分享几个前端中好玩且有用的开源工具,总有一个适合你!
点击上方 前端Q,关注公众号回复加群,加入前端Q技术交流群正所谓差生文具多,作为前端的我们,拥有几个合适的工具和网站可以很有效的提高我们的工具效率,还会有一些很有趣的网站可以在我们敲 bug 累了的时候供我们娱乐,接下来我就和大嘎分析一下我在用的一些工具和网站。聚合API该网站提供了大量的
前端Q
0
原来Matplotlib能画股票K线图!!附代码
之前在一篇文章中提到Matplotlib可视化,甚至可以用来画股票K线图,许多同学也在问代码,这次来发个文回应下。Python用matplotlib绘制K线图,需要配合talib、numpy、mpl_finance等第三方库来使用,效果展示如下:简单讲讲K线图的结构,我不搞股票,所以不太懂,特地查了
Python大数据分析
9
分享一份抓取某东商品名称、价格和评论数的代码
点击上方“Python共享之家”,进行关注回复“资源”即可获赠Python学习资料今日鸡汤芳草已云暮,故人殊未来。大家好,我是皮皮。一、前言前几天在Python白银交流群【邮递员】问了一个Python网络爬虫的问题,提问截图如下:代码如下:import requestsfrom
IT共享之家
0
大视频周报|全国酒店电视操作复杂专项治理动员部署电视电话会在京召开
小美播报本 期 看 点广电总局发4K超高清机顶盒技术新标准;总局公示《智能电视操作系统 第8部分:分类分级》等两项行业标准;工信部组织开展今年5G轻量化(RedCap)贯通行动;全国酒店电视操作复杂专项治理动员部署电视电话会在京召开......(今日流媒体vip可免费获取报告PDF版,详情请见文末。
流媒体网
0
ChatGPT、大模型、AI资料分享群
大家好,我是老章之前我发了一份ChatGPT资料(ChatGPT 系列研究报告(40个PDF)),很多朋友购买了。后来我又整理了一些新的,资料包目前有50个PDF了:ChatGPT 系列研究报告(50个PDF),建了一个资料分享微信群这个群我已经维护了一年,只要有新的资料,我都更新到群里了,内容不限
机器学习算法与Python实战
27
分享一个软硬件开源的低功耗时钟项目
关注、星标公众号,直达精彩内容来源 | 网络这是一款基于 AVR128DA48 的超低功耗 LCD 时钟,能够使用 CR2032 纽扣电池或太阳能电池运行三年以上:它使用 AVR128DA48 的片上温度传感器,用 ADC 读取其自身的电源电压。还有一个 I2C 接口,你
李肖遥
0
单片机转Linux,看这份学习清单!
关注、星标公众号,直达精彩内容来源 | 网络俗话说万事开头难,刚开始的时候,你是否根本就不知如何开始,上网查资料被一堆堆新名词搞的找不到北,去图书馆看书也是找不到方向?又是arm,又是linux,又是uboot头都大了,不知道自己究竟从哪里开始?下面就跟着我学习设计嵌入式
李肖遥
0