VS+OpenCV字符动画ikun打篮球

news2024/9/25 3:16:57

目录

  • 一、环境搭建
  • 实现
  • 效果
  • 模糊知识点
  • 资源

一、环境搭建

  1. Visual Studio 2019
  2. VS+openCVVS2019配置opencv4.6.0手把手一步一步实现
  3. 导出OpenCV的VS项目模板从第四步导出项目模板开始看
  4. VS安装easyx图形库教程
  5. easyx.h报错:无法打开源文件 “xxx.h“ 的解决办法

使用默认的宽字符(Unicode)字符集
在这里插入图片描述

实现

#include <iostream>
#include <locale>
#include <codecvt>
#include <opencv2/opencv.hpp>
#include <easyx.h>
#include<mmsystem.h>// 多媒体
#pragma comment(lib,"winmm.lib")
//#pragma comment(lib, "winmm.lib") 预处理指令,用于告诉编译器在链接时自动引入指定的winmm.lib库文件。

using namespace cv; 
using namespace std;

// 窗口的宽高
#define WIDTH 960
#define HEIGHT 640

int main()
{
    initgraph(WIDTH,HEIGHT);// 初始化窗口的宽高-字符动画窗口
    // 1. 打开视频和音频
    VideoCapture video("./1.mp4");
    /*_T("Arial") 宏定义,用于在 Windows 环境中支持 Unicode 和 ANSI 字符集之间的转换。*/
    mciSendString(_T("open 1.mp3"), NULL, 0, 0);//  Windows API函数通常使用宽字符形式的字符串作为参数
    
                                                // 2.图像处理
    Mat img;						//存储视频的每一帧
    Mat show;						//显示图像
    //准备替换的字符
    const char* str = "@#$&%=+*,';+()~.   ";
    int length = strlen(str);
    int index = 0;          // 替换字符的下标
    String text;
    //设置替换文字的样式
    settextstyle(12, 0,_T("楷体"));		//设置字体Arial
    setbkmode(TRANSPARENT);			//去掉文字背景
    settextcolor(WHITE);			//设置文字颜色为白色

    /*开启批量绘图模式。在调用该函数之后,所有的绘图操作都会被缓存起来,而不会立即显示在屏幕上,
    直到调用FlushBatchDraw()或EndBatchDraw()函数*/
    BeginBatchDraw();

    while (1)
    {
        video >> img;// 从输入流中读取数据的操作,但实际上是从 video 对象中读取下一帧视频数据,并将其存储到 img 对象中
        if (img.empty())	// 帧为空退出
            break;
        
        // 2.1调整图像的属性
        cvtColor(img,img, COLOR_BGR2GRAY);//把原图像变成一个灰度图
        resize(img, img, Size(150,50));   //调整图像大小
        
        // 2.2 字符动画处理
        cleardevice();                      //清屏
        for (int x = 0; x<img.rows; x++)
        {
            for (int y= 0; y < img.cols; y++)
            {
                /*<uchar> 是模板参数,用于指定图像的像素类型。对于灰度图像,每个像素表示为一个无符号字符(8位)<uchar>。
                如果是彩色图像,则可以使用 <Vec3b> 模板参数,其中每个像素由三个无符号字符(8位)组成,分别表示蓝色、绿色和红色通道的值。*/
                //获取图像中 (x, y) 像素位置的颜色值
                int colorRgb = img.at<uchar>(x,y);
                // 通过计算颜色值百分比 确定 颜色相邻时使用 同一个字符
                index = colorRgb / 256.0 * length;
                text += str[index];
            }
            /*
            std::wstring_convert是一个字符串转换器类模板,它接受一个字符串编码转换器类作为模板参数,
            这里的std::codecvt_utf8_utf16<wchar_t>,是专门用于UTF-8到UTF-16转换的编码转换器类。
            使用converter.from_bytes()将UTF-8编码的字符串转换为UTF-16编码的宽字符串,
            或者使用converter.to_bytes()将UTF-16编码的宽字符串转换为UTF-8编码的字符串
            */
            std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
            std::wstring wideText = converter.from_bytes(text.data());
            outtextxy(0, x * textheight(str[index]), wideText.c_str());

            text.clear();
        }

        // 2.3灰度视频处理
        resize(img, show, Size(300, 100));  //调整图像大小
        imshow("iKun-灰度", show);
        mciSendString(_T("play 1.mp3"), NULL, 0, 0);

        // 2.4 停顿处理
        int key = waitKey(22);//等待 毫秒来检测是否有按键被按下
        if (key==' ')
            break;
        //刷新批量绘图缓存并将缓存的图形操作立即显示在屏幕上
        FlushBatchDraw();
    }
    //结束批量绘图模式。调用该函数后,所有的图形绘制操作都会立即显示在屏幕上,并恢复到正常的即时绘图模式
    EndBatchDraw();
    closegraph();// 关闭窗口
    
    return 0;
}

效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

模糊知识点

  1. #pragma comment(lib, "winmm.lib") 预处理指令,用于告诉编译器在链接时自动引入指定的winmm.lib库文件。

  2. _T("Arial") 宏定义,用于在 Windows 环境中支持 Unicode 和 ANSI 字符集之间的转换。在 ANSI 编译环境下会将字符串转换为 ANSI 格式,而在 Unicode 编译环境下会将字符串转换为 Unicode 格式

  3. 批量绘图模式

/*开启批量绘图模式。在调用该函数之后,所有的绘图操作都会被缓存起来,
而不会立即显示在屏幕上,直到调用FlushBatchDraw()或EndBatchDraw()函*/
BeginBatchDraw();

//刷新批量绘图缓存并将缓存的图形操作立即显示在屏幕上
FlushBatchDraw();

//结束批量绘图模式。调用该函数后,所有的图形绘制操作都会立即显示在屏幕上,并恢复到正常的即时绘图模式
EndBatchDraw();
  1. 模板参数
  template<typename _Tp> inline
_Tp& Mat::at(int i0, int i1)

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

<uchar> 是模板参数,用于指定图像的像素类型。对于灰度图像,每个像素表示为一个无符号字符(8位)<uchar>。
如果是彩色图像,则可以使用 <Vec3b> 模板参数,其中每个像素由三个无符号字符(8位)组成,分别表示蓝色、绿色和红色通道的值。
  1. std::wstring_convert字符串转换器类模板
std::wstring_convert是一个字符串转换器类模板,它接受一个字符串编码转换器类作为模板参数,
这里的std::codecvt_utf8_utf16<wchar_t>,是专门用于UTF-8到UTF-16转换的编码转换器类。
使用converter.from_bytes()将UTF-8编码的字符串转换为UTF-16编码的宽字符串,
或者使用converter.to_bytes()将UTF-16编码的宽字符串转换为UTF-8编码的字符串
#include <locale>
#include <codecvt>
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring wideText = converter.from_bytes(text.data());
outtextxy(0, x * textheight(str[index]), wideText.c_str());
  1. 等待 毫秒来检测是否有按键被按下
int key = waitKey(22);//等待 22 毫秒来检测是否有按键被按下
if (key==' ')	// 当按下 空格 键时退出循环
    break;
if (key == 27)	// 当按下 ESC 键时退出循环
       break;

资源

视频素材+源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/696496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tomcat基本了解与nginx的实例

目录 一.tomcat的简介 二.tomcat它是由三个容器组成 nginx的实例1 2.案例二 案例3 四案例4 五总结 一.tomcat的简介 Tomcat 是一个开源的 Java Web 应用服务器&#xff0c;它实际上是 Apache 软件基金会的 Jakarta 项目中的一个子项目。Tomcat 的主要作用是承载和运行基…

蓝桥杯专题-试题版-【分糖果】【矩阵翻硬币】【兰顿蚂蚁】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

7-WebApis-4

Web APIs - 4 目标: 了解DOM节点的增删改查&#xff0c;掌握利用数据操作页面&#xff0c;完成移动端通讯录案例 日期对象节点操作M端事件JS插件综合案例 日期对象 日期对象&#xff1a;用来表示日期和时间的对象 作用&#xff1a;可以得到当前系统日期和时间 Date是JavaSc…

Verilog基础之十一、移位寄存器实现

目录 一、前言 二、工程设计 ​2.1 工程代码 2.2 综合结果 2.3 仿真结果 一、前言 移位寄存器SRL在工程中属于使用频率较高个模块&#xff0c;可用于存储数据&#xff0c;实现串并转换&#xff1b;根据数据移动方向可分为左移寄存器&#xff0c;右移寄存器&#xff0c;左移…

UDP 的报文结构和特点

一.UDP报文的结构 这是存在于各大教科书上的 其实我们应该这样来看更好理解,从上到下从左到右 源端口号:发送方地址 目的端口号:接收方地址 UDP长度:UDP报头UDP载荷, 2个字节64KB(固定不变),这是UDP能接受的最大内容 校验和:检测数据是否出错 二.UDP特点 1.无连接: 直到对方端…

如何将采购报价请求流程自动化?

在当今快节奏的商业环境中&#xff0c;效率和速度是保持竞争力的关键。在采购管理中&#xff0c;企业经常为简化操作而努力的一个领域是报价请求过程。手动处理请求、与供应商沟通并跟踪答复&#xff0c;可能非常耗时且容易出错。 然而&#xff0c;随着像8Manage SRM等专业电子…

外键导致的事务问题的解决方案

Exception分析 异常内容&#xff1a; com.zaxxer.hikari.pool.ProxyConnection : HikariPool-1 - Connection com.mysql.cj.jdbc.ConnectionImpl192ef0c0 marked as broken because of SQLSTATE(08S01), ErrorCode(0) com.mysql.cj.jdbc.exceptions.CommunicationsExceptio…

英雄大战恶棍 VoxEdit 大赛

准备好踏上超乎想像的史诗之旅了吗&#xff1f;号召所有的创作者、梦想家和有远见的人&#xff0c;在令人振奋的英雄大战恶棍 VoxEdit 大赛中展示他们的艺术才能&#xff01;准备好让你们最喜欢的英雄和卑鄙的恶棍以前所未有的方式变得栩栩如生吧&#xff01; 踏入 VoxEdit 的领…

win11中文家庭版下载补丁的方法远程连接

前置知识 参考链接&#xff1a;关于开启WINDOWS家庭版RDPwrap远程桌面报错解决办法&#xff08;如&#xff1a;not listening&#xff09; 0、怎么关闭Windows防火墙&#xff1f; 0、windows安全中心怎么关闭 正文 1、关闭防火墙 2、关闭windows安全中心 3、按照链接&…

【数据库】MySQL的主从复制模式

MySQL的主从复制模式包括异步复制&#xff0c;全同步复制&#xff0c;半同步复制。MySQL默认为异步模式。MySQL5.7引入了一种新的半同步方案&#xff0c;并且在5.7引入了一个新的参数&#xff0c;rpl_semi_sync_master_wait_point&#xff0c;这个参数有两种取值&#xff0c;1&…

Zookeeper:什么是Zookeeper? ①

一、Zookeeper是什么 Zookeeper是一个开源的分布式协调服务框架&#xff0c;它是一个为分布式应用提供一致性服务的软件。 Zookeeper致力于提供一个高性能、高可用&#xff0c;且具备严格的顺序访问控制能力的分布式协调服务&#xff0c;是雅虎公司创建&#xff0c;是G…

Linux更新Firefox 52后突然没声音了?

如果你是一名 Linux 用户&#xff0c;将 Firefox 浏览器升级到了最新的 v52&#xff0c;却发现浏览器不再能播放声音了&#xff0c;你不是唯一遇到这个问题&#xff08;http://www.omgubuntu.co.uk/2017/03/firefox-52-no-sound-pulseaudio-alsa-linux?_utm_source1-2-2&#…

产品的0到1怎么做的?(一)

要想做好产品&#xff0c;不是学一下Axure和墨刀就可以做产品了&#xff0c;那只是术的冰山一解&#xff0c;要想做好产品首先要从道、法、器三维度展开&#xff0c;下面从道方向展开&#xff0c;分想自己的一点心得&#xff1a;道可以道&#xff0c;非常道&#xff0c;产品的道…

NR PDCP(一) overview

这篇开始理下NR PDCP的内容&#xff0c;上图是38.300有关PDCP的服务和功能概括截图。PDCP功能包括对user plane或control plane data的传输&#xff1b;维护PDCP SN&#xff1b;使用ROHC和EHC协议进行header压缩和解压缩&#xff1b;加密(防止窃听)和解密&#xff1b;完整性保护…

2、Redis7 十大数据类型(一)

命令官网 英文版&#xff1a;https://redis.io/commands/ 中文版&#xff1a;http://redis.cn/commands.html/ 1.1 类型说明 1.2 Key命令 命令不区分大小写&#xff0c;但是key区分 命令 说明 keys * //展示当前库的所有key exists key //判断某…

解决Word编号与标签之间间隙过大的问题

前言 今天在写文档时发现&#xff0c;当给标题设置中文编号&#xff08;一、二、三…&#xff09;后&#xff0c;编号与文字之间会产生一个非常大的间隙&#xff0c;使用的字体是“思源黑体M”&#xff0c;更换其他字体后依然如此&#xff0c;很不美观&#xff08;如图所示&am…

(二十二)数据符号化——矢量数据符号化②

数据符号化——矢量数据符号化② 目录 数据符号化——矢量数据符号化② 3.统计符号设置4.组合符号设置 3.统计符号设置 在 ArcMap 中可以使用符号系统来设置和定制地图元素的样式、颜色和标注。其中&#xff0c;统计符号可以用于表示一个或多个统计值的分布情况和趋势。 这是…

数据结构第六章 图 6.1-6.3 错题整理

6.1 6.C 加上一个点实现非连通 去除每个边都是一颗不同的生成树 一共n条边 13.C n个顶点、e条边的无向图&#xff0c;森林。树的角度看&#xff0c;除了根节点没有一条边与其对应&#xff0c;其他顶点都对应一条边&#xff0c;用顶点-边得出有多少颗树 14.A II 等于 也可以…

Git 分布式版本控制

Git概述 Git是分布式版本控制系统&#xff0c;可以快速高效地处理各种项目。具有廉价的本地库&#xff0c;方便的暂存区和多个工作流分支等特性。 版本控制目的&#xff1a;个人开发过渡到团队协作 分布式版本控制系统的优点&#xff1a; 1、服务器断网的情况下也可以…

DELL戴尔笔记本电脑Dell G5 15 5587原厂Win10系统镜像,原装OEM预装专用系统,恢复出厂状态

dell戴尔笔记本电脑&#xff0c;Dell G5 15 5587原厂Windows10系统镜像,原装OEM预装专用系统,恢复出厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件等预装程序 链接&#xff1a;https://pan.baidu.com/s/1Av93lwhHR16SRGJAf__NAg?pwdkqkc 提取码&#xff1a;kq…