当前位置: 首页 > news >正文

EmguCV(OpenCV)实现高效显示视频(YUV)叠加包括汉字

 

视频处理中,往往需要在上面增加文字包括汉字英文字母数字标点等,Emgu.CV/opencv 绘图 线面文字包括中文 这篇里也有相关介绍,但是这篇里根据逐像素修改rgb值的方法效率太低 

 

查了很多资料,基本上opencv叠加汉字的方法都起源于这里

http://wenku.baidu.com/link?url=g1dCXwRbSpy7XUhsStRLANQRmvAXKSAa1ohrphx1R3XSZozi68WrTOrKjbxRnh9jWvF9Ass2SZKnvFrGE2ctCpZadNndhFrQzyj6XzLYZ1S

两个for循环逐像素修改,在高清视频里要修改的像素点量是非常巨大的,40ms一帧(25fps)Image<Bgr, Byte>的显示基本不可能(C#估计效率比C++稍低)

 

注意到Image<Bgr, Byte>有Bitmap方法,

Image<Bgr, Byte> image = new Image<Bgr, Byte>(640, 480); 

Bitmap bmp = image.Bitmap;

 

而在Bitmap 里用C# GDI画图效率是很高的,于是获取Bitmap

画图形文字方法可以参考前几篇:

C# winform开发:Graphics、pictureBox同时画多个矩形

c# winform 动态画矩形 矩形大小可以拖动

GDI画图,判断鼠标点击点在某一画好的多边形、矩形、图形里

平面内,线与线 两条线找交点 两条线段的位置关系(相交)判定与交点求解 C#

 

更多的GDI画图方法很简单的,主要获取控件的Graphics 

Graphics g = panel1.CreateGraphics

然后各种draw函数比opencv等提供的画线函数强多了

 

然后尝试使用C#自带的picturebox显示画好的Bitmap,发现picturebox过几分钟就崩溃了打了个大叉叉,报内存错误。

怎么办呢?

image.Bitmap = bmp;

尝试把画好的bmp重新设置为image.Bitmap ,运行正常

 

测试效率满足需要,同时使用Emgu.CV.UI.ImageBox显示image未发现延时、卡顿等现象,并且运行一天仍然正常。

g.DrawString("EmguCV显示汉字", font16, new SolidBrush(Color.Red), new Point(1500, 100));

 

 

很简单的方法,研究了一段时间。网上没发现相关的文章,关于叠加文字全是如上论文所描述的情形,使用起来很糟糕,所以分享一下。

 

摄像机视频帧解码出yuv转换Image<Bgr, Byte>参考之前的文章:

yuv420p转为emgucv的图像格式Emgu.CV.Image<Bgr, Byte>

 

转载于:https://www.cnblogs.com/jhlong/p/5434536.html

相关文章:

  • 如何优化sql语句
  • Android深度探索(卷1)HAL与驱动开发--读书笔记(第三章)
  • 怎么把文字设置为显示隐藏按钮
  • FCKeditor jsp配置
  • 将字符串编码成数值,求数值最大和问题
  • crontab 安装 和一些 简单的命令
  • eclipse 编译的时候 自动把SDK需要放入libs里面的so文件给删除了
  • 事件处理
  • 实测可用的宽度优先爬虫的实现
  • c语言描述简单的线性表,获取元素,删除元素,
  • 用两个栈实现一个队列
  • 将C#文档注释生成.chm帮助文档
  • 【VS开发】CListCtrl控件使用方法总结
  • python之路之正则表达式
  • 水平方向瀑布流
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • docker python 配置
  • HTTP 简介
  • javascript数组去重/查找/插入/删除
  • JS笔记四:作用域、变量(函数)提升
  • linux学习笔记
  • oschina
  • Python爬虫--- 1.3 BS4库的解析器
  • Vue小说阅读器(仿追书神器)
  • 机器学习学习笔记一
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 使用 Xcode 的 Target 区分开发和生产环境
  • ​io --- 处理流的核心工具​
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (三)模仿学习-Action数据的模仿
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (原)本想说脏话,奈何已放下
  • (转)socket Aio demo
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • ******之网络***——物理***
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .netcore如何运行环境安装到Linux服务器
  • .Net接口调试与案例
  • .net流程开发平台的一些难点(1)
  • .Net组件程序设计之线程、并发管理(一)
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @SuppressWarnings(unchecked)代码的作用
  • [22]. 括号生成
  • [AIGC] SQL中的数据添加和操作:数据类型介绍
  • [Android Pro] AndroidX重构和映射
  • [Android Studio 权威教程]断点调试和高级调试
  • [android] 请求码和结果码的作用
  • [Angularjs]ng-select和ng-options