微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android Java 绑定中的 OpenCV 内存使用情况

如何解决Android Java 绑定中的 OpenCV 内存使用情况

我编写了迭代图像处理函数和下面列出的部分。

            Log.d(TAG,"#1 $iterNum")

            val alphaBlendedMat = Mat(targetMat.height(),targetMat.width(),CvType.CV_8UC4)
            for (i in 0..iterNum) {
                val alpha = fromAlpha + i * (toAlpha - fromAlpha) / iterNum

//            Border thickness
                val windowMaskIter = Mat()
                windowMask.copyTo(windowMaskIter)
                erode(windowMask,windowMask,kernel)
                Core.bitwise_xor(windowMaskIter,windowMaskIter)

//            Src+target alpha blending
                val alphaBlendedMatTmp = Mat(targetMat.height(),CvType.CV_8UC4)
                Core.addWeighted(srcMat,alpha,targetMat.submat(roiTarget),1 - alpha,0.0,alphaBlendedMatTmp.submat(roiTarget))
                Core.copyTo(alphaBlendedMatTmp.submat(roiTarget),alphaBlendedMat.submat(roiTarget),windowMaskIter)

                windowMaskIter.release()
                alphaBlendedMatTmp.release()
            }

            Log.d(TAG,"#2")

当 iterNum 接近 60 时,代码段无任何例外地失败。探查器显示内存使用量超过模拟器实例允许的内存使用量(~0.8Gb)。当我以迭代方式创建和发布新的 Mats 时,我做错了什么?我相信,如果我手动释放垫子,那么 GC 应该在需要新分配时释放内存。是GC有问题还是我对事物的理解有问题?


解决者:

           for (i in 0..iterNum) {
                val alpha = fromAlpha + i * (toAlpha - fromAlpha) / iterNum

//            Border thickness
                val windowMaskIter = Mat()
                windowMask.copyTo(windowMaskIter)
                erode(windowMask,CvType.CV_8UC4)
                val targetRoi = targetMat.submat(roiTarget)
                val alphaBlendedMatTmpRoi = alphaBlendedMatTmp.submat(roiTarget)
                Core.addWeighted(srcMat,targetRoi,alphaBlendedMatTmpRoi)
                val alphaBlendedMatRoi = alphaBlendedMat.submat(roiTarget)
                Core.copyTo(alphaBlendedMatTmpRoi,alphaBlendedMatRoi,windowMaskIter)

                targetRoi.release()
                windowMaskIter.release()
                alphaBlendedMatRoi.release()
                alphaBlendedMatTmp.release()
                alphaBlendedMatTmpRoi.release()
            }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。