opencv 如何访问cv::Mat的引用计数

muk1a3rh  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(167)

假设我想通过简单地将cv::Mat打印到可执行文件中来跟踪它的引用计数。

#include <iostream>
#include <opencv2/opencv>

int main()
{
    cv::Mat m;
    int refCount = (m.u)->refcount; // <--- Crashes here!
    std::cout << refCount << std::endl;
}

字符串
如果我运行上面的代码,我会得到一个运行时错误:
unknown file:测试体中抛出代码为0xc0000005的SEH异常。
我做错了什么?
代码参考:https://github.com/opencv/opencv/blob/4.x/modules/core/include/opencv2/core/mat.hpp

2cmtqfgy

2cmtqfgy1#

refcountcv::Mat::u的成员,cv::Mat::ucv::Mat内部数据保持器。
通常你不应该访问它。
如果您有充分的理由这样做,那么您应该知道,只有当cv::Mat引用某些数据时,cv::Mat::u才会被分配。
在你的例子中,它是default constructed为空的,所以cv::Mat::unull,当你解引用它时会导致访问冲突。
为了修复它,你可以检查null

int refCount = (m.u) ? ((m.u)->refcount) : 0;

字符串
请注意,如果您的cv::Mat不为空,例如:

cv::Mat m(3, 4, CV_8UC3);


你的方法会奏效的。
附带说明:
#include <opencv2/opencv>应该是#include <opencv2/opencv.hpp>

相关问题