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 ...
随机推荐
- dragsort html拖拽排序
一.Jquery List DragSort 对于有些页面,如首页的定制,需要进行动态的拖拽排序.由于自己实现比较困难,我们一般会使用一些js插件来实现.dragsort 就是帮助我们完成这一需求.通 ...
- 不好的MySQL过程编写习惯
刚才为了测试一个东西,写了个存储过程: delimiter $$ drop procedure if exists sp_test$$ create procedure sp_test() begin ...
- Python进阶【第一篇】socket
1.socket模块 要使用socket.socket()函数来创建套接字.其语法如下: socket.socket(socket_family,socket_type,protocol=0) soc ...
- springmvc和struts2的区别
springmvc和struts2的区别 1.springmvc基于方法开发的,struts2基于类开发的. 2.单例和多例的区别:springmvc在映射的时候,通过形参来接收参数的,是将url和c ...
- 报表开发工具Finereport移动端app js接口列表【全】
应用报表工具Finereport的开发人员会发现其移动端app 同样也推出了很多js接口,那这些接口到底有多少,其移动端又有哪些地方支持调用js,这些接口具体又该如何调用呢.根据我平时的开发经验,给大 ...
- 《javascript》高级程序设计——类型转换错误
容易发生类型转换错误的另一个地方,就是流控制语句.像if之类的语句在确定下一步操作之前,会自动把任何值转换成布尔值.尤其是if语句,如果使用不当,最容易出错.来看下面的例子. function con ...
- NOIP2011选择客栈[递推]
题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖啡店均 ...
- [tem]RMQ(st)
倍增思想 代码中有两个测试 #include <iostream> #include <cmath> using namespace std; const int N=1e5; ...
- 第50课 关于对话框(About)
1. 关于对话框 (1)标准的桌面应用软件都有一个关于对话框 (2)关于对话框用于标识软件自身的信息.如logo.项目名.版本号.开发者信息.版权信息.联系方式等. 2. 经典设计方案 3. 项目持续 ...
- sql 函数 汉字转拼音
GO /****** Object: UserDefinedFunction [dbo].[fn_GetPy] Script Date: 2017/1/4 10:53:49 ******/ SET A ...