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

C++ 如何确定cv::Mat使用的是内部数据还是外部数据?,c++,opencv,memory-management,mat,C++,Opencv,Memory Management,Mat,我正在将OpenCV与具有自己的ref计数图像类的遗留代码库集成。我正在添加一个构造函数,用于从cv::Mat创建这些图像。作为一种优化,我想利用cv::Mat的refcounting机制&当它拥有数据时,创建一个浅拷贝。但是,当它使用外部数据时,我需要强制进行深度复制 问题是,通过阅读文档,我看不到确定cv::Mat是否拥有其数据的方法。可以这样做(不修改OpenCV)吗 顺便说一句,如果有问题,我使用的是OpenCV 3.1。使用cv::Mat的成员UMatData*u。如果cv::Mat使

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

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


顺便说一句,如果有问题,我使用的是OpenCV 3.1。

使用cv::Mat的成员
UMatData*u
。如果cv::Mat使用外部数据,则该值应为0,否则可以按如下方式获取ref计数器

img.u->refcount

你看过cv::Mat的构造函数或析构函数代码了吗?他们是如何决定Mat是保存内部数据还是外部数据的?我盯着Mat.hpp、matrix.cpp和umatrix.cpp看了很久,才意识到它们的复杂性。我错过的是opencv2/core/Mat.inl.hpp。我认为一些内联函数可能隐藏在某个地方。@Mika:从这个问题和您的评论中,我想我可能知道外部数据的定义:OpenCV不负责其引用计数的数据。米卡:顺便说一句,我正在阅读OpenCV.org提供的所有教程,这是学习OpenCV最有效的方法吗?我是OpenCV的新手(我使用的是4.4.0版),我只想“画一个直方图”和“理解为什么会这样”,但我不能。我无法理解
calcHist
,因此我决定从一开始就通读所有教程模块。。。