將C++ IplImage 圖像用C#讀取


如何將C++ IplImage 圖像用C#讀取  ?

將opencv 的C++程序做成 dll 動態鏈接庫 用C#調用 

當然這里需要安裝emgucv  ,也可以自己實現這個類。

下面我把實現貼出來給大家參考:

1.制作dll    

  1. #include "stdafx.h"  
  2. #define DLL_API extern "C" _declspec(dllexport)     
  3. #include <Windows.h>    
  4. #include <stdio.h>    
  5. #include <opencv2\opencv.hpp>  
  6. #include <opencv\cxcore.h>  
  7. #include <opencv2/legacy/compat.hpp>  
  8. using namespace std;  
  9. using namespace cv;  
  10.   
  11. DLL_API IplImage * _stdcall run1()  
  12. {  
  13.   
  14.     IplImage *src;  
  15.     src = cvLoadImage("d:/1.jpg");  
  16.       
  17.     return src;  
  18. }  

 2.C#中讀取dll

  需要開啟 unsafe 模式

  1. [DllImport("dll_test_0410.dll")]  
  2.         unsafe  
  3.         public static extern MIplImage* run1();  
調用函數並顯示成圖片:

需要將生成的dll 放入c#工程的bin里面對應的debug或者release

  1. unsafe  
  2.        MIplImage* a;  
  3.        unsafe  
  4.        private void button5_Click(object sender, EventArgs e)  
  5.        {  
  6.            IntPtr aa= new IntPtr();  
  7.            a= run1();  
  8.            int m= a->width;  
  9.            aa = a->imageData;  
  10.            int uu =a->height;  
  11.            int step = a->widthStep;  
  12.            Image<Bgr, byte> src = new Image<Bgr, byte>(m, uu, step, aa);//沒有安裝emgucv的話這個方法不能用,用intPtr轉換  
  13.            pictureBox1.Image =  src.ToBitmap();  
  14. ///////////////方法二,但是MIplImage還需要定義速度也慢,下面為單通道圖像,多通道類似寫一下就行//////  
  15.            byte []uuu = new byte[width*height];  
  16.            Marshal.Copy(aa,uuu,0,width*height);  
  17.            Bitmap dst = new Bitmap(width, height);  
  18.            Color color= new Color();  
  19.            for(int j=0;j<height;j++)  
  20.              
  21.            {for(int i=0;i<width;i++)  
  22.            {  
  23.                byte m = uuu[j*width+i];  
  24.                color = Color.FromArgb(m, m, m);  
  25.                dst.SetPixel(i, j, color);  
  26.            }  
  27.            }  
  28.              
  29.             pictureBox1.Image = dst;  
  30.   
  31.        }  
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM