之前用C++写的算法和测试程序,所以没有用Emgucv。
现在要求将算法封装成dll,用C#开发界面来调用。
调用过程中发现OpenCV的算法函数调用后直接报内存错误,而在原C++的测试程序中相同代码就不会有问题。
出问题的代码如下:
C#部分:
namespace LibTest
{
class ATMAlert
{
public const string dllName = "ATMAlertLib.dll";
[DllImport(dllName, CallingConvention = CallingConvention.Cdecl)]
public static extern void test(IntPtr handler);
}
}
C++库部分:
__declspec(dllexport) void test(void* handler) //参数与算法无关,可以忽略
{
char *data = new char[1280*720];
memset(data, 0, 1280*720);
Mat tempConMat(480, 640, CV_8UC1, data);
vector<vector<Point> > contours;
vector<vector<Point> > objContours;
vector<vector<unsigned int> > objConCorHypIDs;
vector<Vec4i> hierarchy;
//flip(tempConMat, tempConMat, 0); //这一行可以成功执行,说明Mat对象本身应无问题
findContours(tempConMat, contours, hierarchy, CV_RETR_EXTERNAL, CHAIN_APPROX_NONE); //执行这个算法后出现内存访问错误
delete data;
}
代码如上,调用findContours()直接报内存访问错误,程序退出。
有哪位大神知道是什么问题,该如何解决么?小女在此先谢过了……
|