【記錄一個問題】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

析構的時候,發現有6個引用,所以崩潰……
===================================
解決辦法如下:
不要使用 getMat() 或者 getUMat() 方法
而使用 mat.copyTo(umat) 或者 umat.copyTo(mat)
通過拷貝來避免UMat和mat的關聯




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM