相关疑难解决方法(0)

如何确定 cv::Mat 是使用内部数据还是外部数据?

我正在将 OpenCV 与具有自己的引用计数图像类的旧代码库集成。我正在添加一个用于从 cv::Mat 创建这些图像的构造函数。作为优化,我想利用 cv::Mat 的引用计数机制并在拥有数据时制作浅拷贝。但是,当它使用外部数据时,我需要强制进行深拷贝。

问题是,通过阅读文档,我看不到确定 cv::Mat 是否拥有其数据的方法。可以这样做吗(不修改 OpenCV)?

顺便说一句,以防万一,我使用的是 OpenCV 3.1。

c++ opencv memory-management mat

3
推荐指数
1
解决办法
558
查看次数

如何将像素数据的所有权传递给 cv::Mat

我正在创建一个 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数据,那么数据就会泄漏。

有没有办法传递所有权?

c c++ opencv memory-management

2
推荐指数
2
解决办法
2152
查看次数

标签 统计

c++ ×2

memory-management ×2

opencv ×2

c ×1

mat ×1