UMat可以帮助我们调用OpenCL实现并行运算,但是在使用UMat时,如果设置flag为ACCESS_RW,很容易出现报错,如下
! OPENCV warning: getUMat()/getMat() call chain possible problem.
! Base object is dead, while nested/derived object is still alive or processed.
! Please check lifetime of UMat/Mat objects!
最常用的就是读写,注意当使用这种方式的时候UMat对象将会被LOCK直到CPU使用获取Mat对象完成操作,销毁临时Mat对象之后,UMat才可以再被使用。
反过来也是一样,但是有的时候我用会出问题。
所以我会直接使用cv::CopyTo(),可能这样做会减少错误
解决办法如下:
不要使用 getMat() 或者 getUMat() 方法
而使用 mat.copyTo(umat) 或者 umat.copyTo(mat)
通过拷贝来避免UMat和mat的关联