我正在将 OpenCV 与具有自己的引用计数图像类的旧代码库集成。我正在添加一个用于从 cv::Mat 创建这些图像的构造函数。作为优化,我想利用 cv::Mat 的引用计数机制并在拥有数据时制作浅拷贝。但是,当它使用外部数据时,我需要强制进行深拷贝。
问题是,通过阅读文档,我看不到确定 cv::Mat 是否拥有其数据的方法。可以这样做吗(不修改 OpenCV)?
顺便说一句,以防万一,我使用的是 OpenCV 3.1。
我正在创建一个 cv::Mat 传递我在外部分配的像素数据。
cv::Mat myMatrix(vImageResult.height,
vImageResult.width,
CV_8UC1,
vImageResult.data);
Run Code Online (Sandbox Code Playgroud)
我希望 cv::Mat 获得字节的所有权(即创建一个 refCount 并在它达到零时释放字节)。但是文档说
接受数据和步骤参数的矩阵构造函数不分配矩阵数据。相反,它们只是初始化指向指定数据的矩阵头,这意味着没有数据被复制。此操作非常高效,可用于使用 OpenCV 函数处理外部数据。外部数据不会自动解除分配,因此您应该注意它。
vImageResult.data立即释放底层,我将在某处发生错误的访问崩溃。vImageResult.data数据,那么数据就会泄漏。有没有办法传递所有权?