从一个指针创建垫,调整它的大小,并返回指针到新的垫



当我调整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中的本地代码)。

相关内容

  • 没有找到相关文章

最新更新