cv ::来自外部原始指针数据的mat,释放自身

man*_*tta 2 c++ opencv

有没有办法创建一个cv::Mat从外部数据指针,但使该对象负责删除数据?

即,我有一个cv::Matvoid *指针创建一个函数,

cv::Mat createMat() {

  void *data = (...);

  cv::Mat data_m(rows, cols, CV_8UC1, data);
  return data_m;
}
Run Code Online (Sandbox Code Playgroud)

我希望我的回归cv::Mat负责发布数据.我怎样才能做到这一点?

Spa*_*Bot 5

所有OpenCV函数都期望cv::Mat::data为void*,因此您无法更改它.如果继承cv::Mat并编写自己的析构函数,则会与OpenCV不兼容,因为它们不会返回派生类型.我建议包含你cv::Mat作为类的属性,并保留一个std::shared_ptr或其他智能指针来管理底层的生命周期void*.只需使用std::shared_ptr::get() http://www.cplusplus.com/reference/memory/shared_ptr/get/中共享指针的原始指针初始化OpenCV矩阵,并确保它们具有相同的生命周期,即在同一个类中.