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>(, ); Bitmap bmp = image.Bitmap;
而在Bitmap 里用C# GDI画图效率是很高的,于是获取Bitmap
画图形文字方法可以参考前几篇:
C# winform开发:Graphics、pictureBox同时画多个矩形
平面内,线与线 两条线找交点 两条线段的位置关系(相交)判定与交点求解 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(, ));

很简单的方法,研究了一段时间。网上没发现相关的文章,关于叠加文字全是如上论文所描述的情形,使用起来很糟糕,所以分享一下。
摄像机视频帧解码出yuv转换Image<Bgr, Byte>参考之前的文章:
yuv420p转为emgucv的图像格式Emgu.CV.Image<Bgr, Byte>
EmguCV(OpenCV)实现高效显示视频(YUV)叠加包括汉字的更多相关文章
- OpenCV: imshow后不加waitkey无法显示视频
OpenCV显示视频帧时出现一个问题,就是imshow之后若是不加waitkey则无法显示,找了很久也没找到原因. 只是发现也有人发现这个问题: cvWaitKey(x) / cv::waitKe ...
- 使用opencv显示视频的方法
下面对使用opencv显示视频做一个简单的记录.当然,网上这方面的资料已经数不胜数了,我只是将其简单记录,总结一下. 在opencv中显示视频主要有: (1)从本地读取视频和调用摄像头读取视频 (2) ...
- MFC学习篇(一):用OpenCV显示视频
首先是一些基础的步骤,如建立MFC应用,添加按钮等,博主主要参考了下面这篇文章,其中的前32步都是用OpenCV显示图片和视频所必须的,即通用的.由于LZ原来有配置OpenCV的基础,所以配制还是比较 ...
- ffmpeg显示视频
项目最近需要实现播放视频功能,这个在上家公司就做过.虽然跟之前的场景不一样,有以前的功底还是很快可以解决,事实也确实如此.在使用DShow处理完视频分割与合并后,继续使用DShow显示视频,很快即完成 ...
- Opencv读取并获取视频属性
opencv中通过VideoCaptrue类对视频进行读取操作以及调用摄像头.常用的操作如下: 1.常用构造函数 1.VideoCapture类的构造函数:C++: VideoCapture::Vid ...
- Kafka+OpenCV 实现实时流视频处理
1. 启动Kafka Server bin/kafka-server-start.sh config/server.properties & 2. 创建一个新topic bin/kafka- ...
- WPF中在摄像头视频上叠加控件的解决方案
一.视频呈现 前段时间,在一个wpf的项目中需要实时显示ip摄像头,对此的解决方案想必大家都应该知道很多.在winform中,我们可以将一个控件(一般用panel或者pictruebox)的句柄丢给摄 ...
- wpf显示视频,image控件闪屏,使用winform控件实现
使用C#调用mingw的动态库实现视频识别软件,程序通过C++调用opencv打开视频,将图像的原始数据以rgb24的方式传递给C#端,C#通过构造图像对象给控件赋值的方式显示图片. 一开始使用wpf ...
- opencv打开摄像头获取视频程序
// // main.cpp // opencv3 // // Created by PKU on 14-9-16. // Copyright (c) 2014年 PKU. All rights re ...
随机推荐
- 崔用志-微信开发-java版本
崔用志-微信开发-java版本 今天看到一些关于微信开发的知识蛮好的博客,分享给大家,希望对大家有帮助. 微信开发准备(一)--Maven仓库管理新建WEB项目 微信开发准备(二)--springmv ...
- linux常用系统监控命令
原文:http://blog.sina.com.cn/s/blog_68f1c17001016uvy.html Linux提供了很多用于监控系统的工具,使用这些工具可以找到导致系统性能降低的瓶颈.系统 ...
- 代码提交时让svn忽略classpath、target、.project等
在用eclipse操作时,经常用到svn的与资源同步这个操作,但是打开的时候会有很多生成的class文件,其实这些并不需要提交的,因为svn原则上是用来管理源代码的.每次资源同步时看到很多class文 ...
- mysql下存储文件问题
ibdata1 & mysql-bin 问题:磁盘空间报警,经查发现ibdata1和mysql-bin日志占用空间太多(其中ibdata1超过120G,mysql-bin超过80G) 原因:i ...
- Linux Shell编程入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- 报表开发之批量导入导出excel
在日常使用报表过程中,会有这样一种情况,你将Excel表分发给各个员工,员工填完后,统一整理成多个Excel,你需要将这些数据,用报表的填报功能,提交录入到数据库中,这样一来可避免到服务器机房录数据的 ...
- 理解 OpenStack 高可用(HA)(1):OpenStack 高可用和灾备方案 [OpenStack HA and DR]
本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...
- C#学习笔记-Windows窗体自定义初始位置
根据屏幕大小定义初始位置: (这个不是难,但是最近常常忘记,记着方便查看.) //获取当前屏幕的长和宽 int ScreenX = Screen.PrimaryScreen.Bounds.Width; ...
- 当我学完Python时我学了些什么
本文是本人学完Python后的一遍回顾,加深理解而已,Python大神请过~ 学习Python的这几天来,觉得Python还是比较简单,容易上手的,就基本语法而言,但是有些高级特性掌握起来还是有些难度 ...
- BZOJ1951[SDOI2010]古代猪文
Description "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久 ...