天天看點

有效的GOCsharpHelper1.0(源代碼開放)

csharp編寫界面,調用基于opencv的圖像處理類庫,是解決一類問題的優良方法。經過不懈研究,有最新進展:

一、目前情況和優點

       位置在11.通過clr

有效的GOCsharpHelper1.0(源代碼開放)
       架在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;
         
        }      
有效的GOCsharpHelper1.0(源代碼開放)
有效的GOCsharpHelper1.0(源代碼開放)

通過複雜的方法,将串讀入進來,然後轉換為mat.這個過程是在記憶體中進行的,而且效果良好。但是imdecode采用了file I/O的方法,是以和直接寫入磁盤是效果一樣的。

此外,為opencv生成clr的dll,csharp中直接引用。

       優點:

       1、clr的優點,友善引用和調試;

       2、會生成過程檔案,但是能夠自動删除。

       3、效率還是有保障的。

二、存在問題

       主要問題還是發展的問題,新的模型,少有人運作,能否用于實際?架構是否合理?

三、發展計劃

       算法衍生:我将現有代碼運用于GOImageReasearch中,取得一些效果。

有效的GOCsharpHelper1.0(源代碼開放)

文中提及的代碼實作

http://files.cnblogs.com/files/jsxyhelu/ClassLibrary1.zip 

http://files.cnblogs.com/files/jsxyhelu/GOImageResearch.zip

目前方向:圖像拼接融合、圖像識别

聯系方式:[email protected]

下一篇: 子孫炎黃

繼續閱讀