Emgu.CV/opencv 绘图 线面文字包括中文

绘图很简单
Emgu.CV.Image<Bgr, Byte> image;
 
使用image.Draw可以画各种图形和文字包括英文及数字,不支持中文
 
CircleF circle = new CircleF(new System.Drawing.PointF(200, 200), 100.0f);
image.Draw(circle, new Bgr(255, 0, 0), 2);
image.Draw("11", new Point(300, 300), Emgu.CV.CvEnum.FontFace.HersheyDuplex, 0.6, new Bgr(0, 255, 255), 1);
 
或者使用CvInvoke绘图或文字,同样不支持中文
 
CvInvoke.PutText(image, "aa", new System.Drawing.Point(50, 50), Emgu.CV.CvEnum.FontFace.HersheyScriptComplex, 1, new MCvScalar(255, 255, 0), 2);
 
 
支持中文的方法:
创建一个位图在上面写文字,逐像素的修改image对应像素的rgb
效率不是很高
 

System.Drawing.Bitmap bmp;

 
bmp = new System.Drawing.Bitmap(200 45);  //创建个小图片,背景黑色rgb全是0,不是0的像素即为文字渲染过的,图片无需太大,容得下文字就好,不然遍历很耗时
            Graphics g = Graphics.FromImage(bmp);
Font drawFont = new Font("宋体", , FontStyle.Bold);
g.DrawString("测试", drawFont, Brushes.Yellow, new PointF(, ));
g.Save(); for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
Color c = bmp.GetPixel(i, j);
if (c.R > || c.B > || c.G > )
{
CvInvoke.cvSet2D(image, j + , i, new MCvScalar(c.B, c.G, c.R)); //修改对应像素值
}
}
}
上一篇:Django 基础二(View和urls)


下一篇:解决web项目存在多个log4j.properties配置文件,导致日志级别配置不生效问题