当我调整Mat的大小时,opencv的Mat发生了一些奇怪的事情。
这是opencv中的标头:首先,我从可视c#中的托管代码收到一个指针:
unsigned char * PointerImage( unsigned char* matData, int widht)
我从opencv中的指针创建Mat:
cv::Mat OriginalImg(Size(widht,widht),CV_8UC3,matData);
如果我不应用调整大小,而是将指针发送到在Visual C#中为我的程序创建的Mat的指针,它可以正常工作,并且我可以在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;
}
当我应用调整大小时,我对指针表示怀疑。谢谢。
用户@berak是正确的。您的代码中有内存泄漏。您不能返回指向函数中创建的局部变量数据的指针。当程序超出PointerIMage函数范围时,将触发OriginalImg对象的析构函数。释放内存,OriginalImg.data也释放,使该指针不可用。
请考虑在c ++代码中使用全局变量(实际上不是很好的解决方案),或者将c ++代码封装在以后可以在c#中使用的类中(取决于如何调用本机代码形式.NET)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句