博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EmguCV(OpenCV)实现高效显示视频(YUV)叠加包括汉字
阅读量:6800 次
发布时间:2019-06-26

本文共 976 字,大约阅读时间需要 3 分钟。

原文:

 

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

 

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

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

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

 

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

Image
image = new Image
(640, 480); Bitmap bmp = image.Bitmap;

 

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

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

 

更多的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>参考之前的文章:

 

转载地址:http://txuwl.baihongyu.com/

你可能感兴趣的文章
oracle字符集查看修改
查看>>
[Leetcode] Container With Most Water
查看>>
查看版本信息的命令
查看>>
Linux搭建SVN服务器
查看>>
UML 之 数据流图(DFD)
查看>>
IO知识点整理(文件File类的使用)
查看>>
mahout 实现canopy
查看>>
修炼你自己
查看>>
窥探一句话木马后门的背后
查看>>
Kafka设计解析(二):Kafka High Availability (上)-转
查看>>
bzoj2186【SDOI2008】沙拉公主的困惑
查看>>
Lambda 表达式的演示样例-来源(MSDN)
查看>>
什么场景应该用 MongoDB ?
查看>>
python学习:猜数字游戏
查看>>
Linux 进程、线程运行在指定CPU核上
查看>>
iOS11开发教程(二十三)iOS11应用视图实现按钮的响应(3)
查看>>
微软自然语言理解平台LUIS:从零开始,帮你开发智能音箱
查看>>
Centos创建用户
查看>>
视频列表
查看>>
python2 和 python3 区别
查看>>