制作一个坤坤字符动画

所谓字符动画就是把一个视频里面的像素点都转换为字符,根据像素点里面颜色的不同转换为不同的字符,从而达到字符动画的效果

首先第一步,需要使用到opencv进行流视频操作,可以去相应的博客下载opencev,搭载好环境使用

先找一个坤坤打篮球的视频,导入到项目中

具体为看见有一堆.vcxproj 文件,就保存在这里面,然后定义一个img进行流视频,将视频里面的每一帧都导出来,再用imshow显示,就可以得到一个完整的视频,如下

 但我们这个视频窗口只是提供一个转换的,所以我们将它缩小变灰,再弄一个新窗口来实现这个窗口的视频转换为字符动画

 接下来就是在这个窗口里面实现字符动画,就是把流视频里面的每一帧图片提取到此窗口中,然后用文本来根据像素点颜色的深浅,显示不同的字符文本,从而达到字符动画的效果

这里采用二维数组来获取color的深浅,然后用文本接受字符数组,最后再清理,然后进入下一帧, 字符数组在第一张图中创建好了,length就是用strlen来获取的长度,最后设置文字颜色,样式,切记透明,代码较短比较简单,最后效果如下所示

坤坤还是风采依旧,此代码不止坤坤的视频可以运用 ,其他色彩分明较大的也可以,只有把视频放入videoCapture里面,然后再把视频移动到图二所示的文件地址里,就可以实现视频的字符动画啦

代码如下

 #include <opencv2/opencv.hpp>

#include <easyx.h>

#include <iostream>

#include <mmsystem.h>

 

using namespace cv;

using namespace std;

 

#define WIDTH 960

#define HEGEH 480

 

 

 

int main()

{

    initgraph(WIDTH, HEGEH);

    VideoCapture vedio("./2.mp4"); //导入视频

    Mat img; //存储每一帧

    Mat show; //显示图像

    const char* str = "@#$%=+&*,;?()^ ";

    int length = strlen(str);

    int index = 0;

    String text;

    settextstyle(12, 0,"楷体");

    setbkmode(TRANSPARENT); //去掉文字背景

    settextcolor(WHITE); //设置文字颜色

 

 

 

    while (1)

    {

        vedio >> img; //流视频操作

        if (img.empty()) 

        {

            break;

        }

        cvtColor(img, img, COLOR_BGR2GRAY);

        resize(img, show, Size(300, 150));

        resize(img, img, Size(150, 50));

        cleardevice();

        for (int x = 0; x < img.rows; x++)

        {

            for (int y = 0; y < img.cols; y++)

            {

                int color = img.at<uchar>(x, y);

                index = color / 256.0 * length;

                text += str[index];

            }

            outtextxy(0, x * textheight(str[index]),text.data());

            text.clear();

        }

 

 

 

        imshow("ikun", img);

 

        int kay = waitKey(10);

        if (kay == ' ') 

        {

            break;

        }

 

    }

    closegraph();

    return 0;

}

只要搭建好opencv环境,复制粘贴即可使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值