zoukankan      html  css  js  c++  java
  • 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("宋体", 24, FontStyle.Bold);
                g.DrawString("测试", drawFont, Brushes.Yellow, new PointF(0, 0));
                g.Save();
     
    for (int i = 0; i < 200; i++)
                            {
                                for (int j = 0; j < 45; j++)
                                {
                                    Color c = bmp.GetPixel(i, j); 
                                    if (c.R > 0 || c.B > 0 || c.G > 0)
                                    {
                                        CvInvoke.cvSet2D(image, j + 10, i, new MCvScalar(c.B, c.G, c.R)); //修改对应像素值
                                    }
                                }
                            }
  • 相关阅读:
    排序
    多线程
    swift demo
    支付宝支付
    TV端产品设计法则和分析
    产品经理提升修炼的方法
    “互联网+”不是传统企业的万金油
    我眼中理想的程序员
    来谈谈产品的模仿与抄袭的问题
    产品体验成就产品
  • 原文地址:https://www.cnblogs.com/jhlong/p/5433886.html
Copyright © 2011-2022 走看看