gpt4 book ai didi

c# - 从指针创建 Mat,调整它的大小并将指针返回到新的 mat

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:31 24 4
gpt4 key购买 nike

当我调整 Mat 的大小时,opencv 的 Mat 发生了一些奇怪的事情。

这是 opencv 中的 header :首先,我在 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.data 也被释放,使得这个指针不可用。

请考虑在您的 C++ 代码中使用全局变量(实际上这不是好的解决方案)或将您的 C++ 代码封装在您稍后可以在 C# 中使用的类中(取决于您如何调用 native 代码形式 .NET)。

关于c# - 从指针创建 Mat,调整它的大小并将指针返回到新的 mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22693923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com