我想做以下事情:
- 复制一份我以某种方式检索到的 Cv::mat
- 改造它
- 将指向数据的指针连同元信息(大小、格式等)返回给调用者
- 当我完成后,释放数据
我使用的代码是:
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/