这是opencv中的标头: 首先,我在visual c#中收到了来自托管代码的指针:
unsigned char * PointerImage( unsigned char* matData, int widht)
我在opencv中用指针创建一个Mat:
cv::Mat OriginalImg(Size(widht,widht),CV_8UC3,matData);
如果我不应用调整大小并且我将指针发送到我在Visual c#中创建的程序,它可以正常工作,我可以在我的visual c#中显示图像。
unsigned char *data = OriginalImg.data;
当我应用调整大小以放大图像时,问题就开始了:
cv::resize( OriginalImg, OriginalImg, size(270,270));
现在我看不到图像了。
这是整个代码:
unsigned char * PointerImage( unsigned char* matData, int widht){
cv::Mat OriginalImg(Size(widht,widht),CV_8UC3,matData);
cv::resize( OriginalImg, OriginalImg, size);
unsigned char *data = OriginalImg.data;
return data;
}
当我应用调整大小时,我怀疑指针。
感谢。
答案 0 :(得分:1)
用户@berak是对的。您的代码中存在内存泄漏。您无法返回指向函数中创建的 local 变量数据的指针。当程序离开PointerIMage函数范围时,会触发OriginalImg对象的析构函数。内存被释放,OriginalImg.data也被释放,使得这个指针不可用。
请在c ++代码中使用全局变量(实际上不是很好的解决方案),或者将c ++代码封装在以后可以在c#中使用的类中(取决于你如何调用.NET的本机代码)。