c++ c# opencv dll 调用的方法

来源:互联网 发布:淘宝网西服 编辑:程序博客网 时间:2024/06/10 19:03

一,c++dll c#调用  参数传递  需求:C#传递一个路径给C++ DLL ,DLL接口返回一个字符串给C#

c++接口定义:

int plate_recognize(const char *path, char** out)

path为传进的路径,可心为单指针。

out为返回的字符串,必需为双指针


//双指针  通过这样的方式给返回值赋值。
int i = 0;
for (i = 0; i < plantStr.length(); i++)
{
(*out)[i] = plantStr[i];
}


c#端调用: 一定要用ref

      [DllImport("easyPR_Dll.dll", EntryPoint = "plate_recognize", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
       

    private static extern int plate_recognize(string pic, ref stringresult);

调用

      string result="123456789123456789";
            int res = plate_recognize(strSrc,ref result);
            txtresult.Text = txtresult.Text+result.ToString();


二,c# 传过图片的IplImage 不传路径

c++定义

int plate_recognize(IplImage* src, char** out){

//转为MAT给opencv用

cv::Mat img = cv::cvarrToMat(src);

result = easypr::demo::test_plate_recognize(img, plantStr);

}



c#端调用:

        [DllImport("easyPR_Dll.dll", EntryPoint = "plate_recognize", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
        private static extern int plate_recognize( IntPtr pic, ref string result);


    private void button1_Click(object sender, EventArgs e)
        {
            string strSrc =txtfile.Text;
            string result="1111111111111111111111111";


            Mat fileimage = new Mat(strSrc, Emgu.CV.CvEnum.LoadImageType.AnyColor);
            Emgu.CV.Image<Bgr, byte> img = fileimage.ToImage<Bgr, byte>();
            IntPtr imgptr = img.Ptr;


            int intre = plate_recognize(imgptr, ref result);
             txtresult.Text = result.ToString();
        }