VS+OpenCV字符动画ikun打篮球

目录

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

一、环境搭建

  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 640int 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("楷体"));		//设置字体Arialsetbkmode(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.hqwc.cn/news/2866.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 图形系统-图解和初步探究

Android 图形系统-图解和初步探究_猎羽的博客-CSDN博客https://blog.csdn.net/feather_wch/article/details/131486729 Android图形系统 2023-7-1 问题&#xff1a;如何将一帧画面显示到屏幕上&#xff1f; 绘制流程 Activity代码 Window的结构 绘制流程 Activity启动后&a…

深度学习(24)——YOLO系列(3)

深度学习&#xff08;24&#xff09;——YOLO系列&#xff08;3&#xff09; 文章目录 深度学习&#xff08;24&#xff09;——YOLO系列&#xff08;3&#xff09;1. BOF(bag of freebies)2. Mosaic data augmentation3. 数据增强4. self-adversarial-training&#xff08;SAT…

Mysql的SQL性能分析【借助EXPLAIN分析】

性能分析 要说sql有问题&#xff0c;需要拿出证据&#xff0c;因此需要性能分析 Mysql查询优化器&#xff08;Mysql Query Optimizer&#xff09; Mysql中有专门负责优化SELECT语句的优化器模块&#xff0c;主要功能&#xff1a;通过计算分析系统中收集到的统计信息&#xf…

Spring的存储与获取Bean

Spring的存储与获取Bean &#x1f50e;Spring—存储Bean配置扫描路径利用类注解进行存储添加注解存储Bean关于Id为什么需要五个类注解类注解之间的关系 利用方法注解进行存储关于Id &#x1f50e;Spring—获取Bean属性注入Set注入构造方法注入总结(Spring的注入方式? 它们之间…

An unexpected connection driver error occured

安装下载好rabbitmq&#xff0c;我在springboot整合mq&#xff0c;启动的时候报错了 An unexpected connection driver error occured 后来又报 Failed to check/redeclare auto-delete queue(s). 综合就是连接问题&#xff0c;端口有问题 我试过添加账户&#xff0c;提高权限&…

【架构】领域驱动设计(DDD)的几种典型架构介绍

文章目录 前言一、专业术语二、架构演变三、限界上下文四、领域驱动设计的四重边界五、整洁分层架构六、六边形架构七、洋葱架构总结 前言 我们生活中都听说了DDD&#xff0c;也了解了DDD&#xff0c;那么怎么将一个新项目从头开始按照DDD的过程进行划分与架构设计呢&#xff…

解决页面等比缩放问题

近些年可视化数据大屏技术早已成熟&#xff0c;在市场上相关技术也是五花八门&#xff1b;通常情况是自行开发&#xff0c;要不找技术比较成熟大厂定制&#xff0c;或者使用较成熟的低代码平台实现。 技术门槛比较低&#xff0c;不过在数据大屏项目实施过程中会发现&#xff0c…

深入理解深度学习——BERT派生模型:BART(Bidirectional and Auto-Regressive Transformers)

分类目录&#xff1a;《深入理解深度学习》总目录 UniLM和XLNet都尝试在一定程度上融合BERT的双向编码思想&#xff0c;以及GPT的单向编码思想&#xff0c;同时兼具自编码的语义理解能力和自回归的文本生成能力。由脸书公司提出的BART&#xff08;Bidirectional and Auto-Regre…

CDH 之 Hive 中文乱码平定通用法则

一、乱象 1.1 中文注释乱码 hive> DESCRIBE test; OK # col_name data_type comment id string ??ID ?? pcs string ????? …

uniapp中uni-popup的用法——实例讲解

uni-pop弹出层组件&#xff0c;在应用中弹出一个消息提示窗口、提示框等,可以设置弹出层的位置&#xff0c;是中间、底部、还是顶部。 如下图效果所示&#xff1a;白色区域则为弹出的pop层。 一、 创建一个自定义组件&#xff1a; 1.项目中安装下载uni-pop插件。 2.把pop内容…

C# wpf 附加属性实现任意控件拖动调整大小

摘自这里 https://blog.csdn.net/u013113678/article/details/121719278 调试效果如下 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using Syst…

CISSP证书考试难度大吗?本文教你如何轻松拿下CISSP

主题&#xff1a;CISSP含金量、CISSP考试经验、CISSP备考、CISSP考试大纲 CISSP含金量高 CISSP注册信息系统安全师认证是信息安全领域被全球广泛认可的IT安全认证&#xff0c;一直以来被誉为业界的“金牌标准”。CISSP认证不仅是对个人信息安全专业知识的客观评估&#xff0c…