有没有办法创建一个cv::Mat从外部数据指针,但使该对象负责删除数据?
即,我有一个cv::Mat从void *指针创建一个函数,
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负责发布数据.我怎样才能做到这一点?
所有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矩阵,并确保它们具有相同的生命周期,即在同一个类中.
| 归档时间: |
|
| 查看次数: |
3408 次 |
| 最近记录: |