• 有效的GOCsharpHelper1.0(源代码开放)


    csharp编写界面,调用基于opencv的图像处理类库,是解决一类问题的优良方法。经过不懈研究,有最新进展:

    一、目前情况和优点
           位置在11.通过clr
        
           架在clr.dll中
     
    String^  Class1::Method(cli::array<unsigned char>^ pCBuf1)
    {
         pin_ptr<System::Byte> p1 = &pCBuf1[0];
         unsigned char* pby1 = p1;
         cv::Mat img_data1(pCBuf1->Length,1,CV_8U,pby1);
         cv::Mat img_object = cv::imdecode(img_data1,IMREAD_UNCHANGED);
         //////////////////////////////////处理过
         cvtColor(img_object,img_object,40);
      ////////////////////////////////////////////////////////////////////
         if (!img_object.data)
            return nullptr;
         //获得目录,保存文件
         cv::imwrite("c:/strDst.jpg",img_object);
         return "c:/strDst.jpg";
    }
    

     


     csharp这边,首先,有wrapper
    class GOCsharpHelper
        {
            Class1 client = new Class1();
            string strResult = null;
            //输入参数是string或bitmap
            public Bitmap ImageProcess(string ImagePath){
                Image  ImageTemp = Bitmap.FromFile(ImagePath);
                return ImageProcess(ImageTemp);
            }
            //输出结果是bitmap
            public Bitmap ImageProcess(Image image)
            {
                MemoryStream ms = new MemoryStream();
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] bytes = ms.GetBuffer();
                strResult = client.Method(bytes);
                Image ImageResult = Bitmap.FromFile(strResult);
                return (Bitmap)ImageResult;
            }
            public void Clear()
            {
            
                if(File.Exists(strResult))
                File.Delete(strResult);
            }
        }
    

     


    构然后有细节
     
     private void button2_Click(object sender, EventArgs e)
            {
                if (pictureBox1.Image != null)
                    pictureBox1.Image.Dispose();
                Image image = gocsharphelper.ImageProcess(" E:/sandbox/logo.jpg");
               pictureBox1.Image = image;
             
            }
     
    通过复杂的方法,将串读入进来,然后转换为mat.这个过程是在内存中进行的,而且效果良好。但是imdecode采用了file I/O的方法,所以和直接写入磁盘是效果一样的。
    此外,为opencv生成clr的dll,csharp中直接引用。
           优点:
           1、clr的优点,方便引用和调试;
           2、会生成过程文件,但是能够自动删除。
           3、效率还是有保障的。
    二、存在问题
           主要问题还是发展的问题,新的模型,少有人运作,能否用于实际?框架是否合理?
    三、发展计划
           算法衍生:我将现有代码运用于GOImageReasearch中,取得一些效果。
     
    文中提及的代码实现
     
    http://files.cnblogs.com/files/jsxyhelu/ClassLibrary1.zip 
     
    http://files.cnblogs.com/files/jsxyhelu/GOImageResearch.zip




  • 相关阅读:
    Ubuntu下编译3.0.4内核
    多个Android项目源码-覆盖方方面面值得学习
    8086汇编指令速查手册
    xz解压缩详解
    (转载)移植最新内核linux-3.14.6到mini2440开发板
    收录 Uboot 详解
    Windows Terminal 配置文件
    C# 7.2 中 In参数( in parameter )的性能比较
    JavaScript 的 parseInt(x), parseFloat(x), Number(x), +x, ~~x, x>>>0, isNaN(x) 区别和结果
    Windows Terminal 配置 git-bash,集成右键菜单,集成VSCode
  • 原文地址:https://www.cnblogs.com/jsxyhelu/p/6291454.html
Copyright © 2020-2023  润新知