当我调整Mat的大小时,opencv的Mat发生了一些奇怪的事情。
这是opencv的头文件:首先,我从visual 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也被释放。数据,使该指针不可用。
请考虑在你的c++代码中使用全局变量(事实上不是一个好的解决方案),或者将你的c++代码封装在你以后可以在c#中使用的类中(取决于你如何调用。net中的本地代码)。