首页 > 技术文章 > 【记录一个问题】opencv中使用UMat类,在析构的时候出现refcount == 0的断言错误

ahfuzhang 2019-06-05 10:27 原文

发生coredump时的错误信息如下:

terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.1.0-dev) /home/admin/opencv/opencv-master/modules/core/src/matrix.cpp:169: error: (-215:Assertion failed) u->refcount == 0 in function 'deallocate'

 

以下写法导致这种断言错误:

cv::resize(u_input_gray, u_input_gray, cv::Size(0, 0), 0.5, 0.5,
      cv::INTER_AREA);
 
 重新编译了debug版本,具体调用堆栈如下:
1 #7  0x00007ffff6f233d7 in _Unwind_Resume (exc=0x128f3e0) at ../../../libgcc/unwind.inc:230
2 #8  0x00000000004589b9 in cv::StdMatAllocator::deallocate (this=0x1209b90, u=0x1269640)
3     at /home/admin/opencv/opencv-master/modules/core/src/matrix.cpp:169
4 #9  0x00000000004fcc17 in cv::UMat::deallocate (this=0x7fffffffd990) at /home/admin/opencv/opencv-master/modules/core/src/umatrix.cpp:490
5 #10 0x0000000000461893 in cv::UMat::release (this=0x7fffffffd990)
6     at /home/admin/opencv/opencv-master/modules/core/include/opencv2/core/mat.inl.hpp:3777
7 #11 0x00000000004fcb9c in cv::UMat::~UMat (this=0x7fffffffd990, __in_chrg=<optimized out>)
8     at /home/admin/opencv/opencv-master/modules/core/src/umatrix.cpp:481

 

p u->refcount
$1 = 6

析构的时候,发现有6个引用,所以崩溃……
===================================
解决办法如下:
不要使用 getMat() 或者 getUMat() 方法
而使用 mat.copyTo(umat) 或者 umat.copyTo(mat)
通过拷贝来避免UMat和mat的关联



推荐阅读