【记录一个问题】opencv中使用UMat类,在析构的时候出现refcount == 0的断言错误
发生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
===================================
解决办法如下:
不要使用 getMat() 或者 getUMat() 方法
不要使用 getMat() 或者 getUMat() 方法
而使用 mat.copyTo(umat) 或者 umat.copyTo(mat)
通过拷贝来避免UMat和mat的关联
posted on 2019-06-05 10:27 ahfuzhang 阅读(1794) 评论(0) 编辑 收藏 举报