c++ - 如何在没有额外分配的情况下从 OpenCV 矩阵获取图像数据?

标签 c++ opencv

我想做以下事情:

  1. 复制一份我以某种方式检索到的 Cv::mat
  2. 改造它
  3. 将指向数据的指针连同元信息(大小、格式等)返回给调用者
  4. 当我完成后,释放数据

我使用的代码是:

cv::Mat m(...); //here is source image

cv::Mat *img  = new cv::Mat(m.clone());// copy the data
//do transformations
(*result)->pdata = img->data; // pointer to data gois to out parameter
img->addref(); //to prevent freeing the image data after tempo
delete img; //dispose of temporary object

...

delete [] outparam->pdata; //result == &outparam; free data after use

但是,在执行时,此代码会在以下方面产生断言失败:

_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

我应该如何实现我的目标?

最佳答案

您可以为预分配内存创建Mat 对象。在这种情况下,引用计数将被禁用,并且对象不会在析构函数中释放此内存:

cv::Mat m(...);
Mat img(rows, cols, type, (*result)->pdata);
m.copyTo(img);
...
delete [] (*result)->pdata;

关于c++ - 如何在没有额外分配的情况下从 OpenCV 矩阵获取图像数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17881579/

相关文章:

c++ - 缓存行中存储了多少数组?

c++ - Boost.asio 服务器-客户端。连接两台电脑

python - 使用 SURF 和 FLANN 比较图像与图像数据库

c++ - 在 OpenCV 中比较图像边缘和边距

opencv - 在opencv中学习后保存KNN分类器

c++ - GetLocalTime 和 GetSystemTime 之间的区别?

c++ - glGenTextures 段错误?

java - 相同的正则表达式搜索结果在 C++ 和 Java 中不同

opencv - OpenCV 中的图像旋转(90 度)

python - 为什么 tensorflow 模型总是预测同一类?