I did a loop do apply alpha mask in a OpenCV Mat, but to execute this loop take more than 5 seconds to execute in a RGB image of 1200x800, I don't understand why, because the same operation in C++ takes no more than some milliseconds.
I use the Android log to monitor when it enters on the loop, and when it goes out.
fun cutMask(background: Mat, foreground: Mat, mask: Mat) {
val maskMat = Mat()
val rows = background.rows()
val cols = background.cols()
val valueBack = ByteArray(4)
val valueFore = ByteArray(4)
val ValueAlpha = ByteArray(1)
//Log.d(TAG, "Entering cut loop")
for (r in 0 until rows) {
for (c in 0 until cols) {
background.get(r, c, valueBack)
foreground.get(r, c, valueFore)
mask.get(r, c, ValueAlpha)
val alpha = ValueAlpha[0].toUByte().toFloat()/255f
valueBack[0] = (valueBack[0].toUByte().toFloat()*(1f - alpha) + valueFore[0].toUByte().toFloat()*alpha).toByte()
valueBack[1] = (valueBack[1].toUByte().toFloat()*(1f - alpha) + valueFore[1].toUByte().toFloat()*alpha).toByte()
valueBack[2] = (valueBack[2].toUByte().toFloat()*(1f - alpha) + valueFore[2].toUByte().toFloat()*alpha).toByte()
background.put(r, c, valueBack)
}
}
//Log.d(TAG, "Out cut loop")
}
PS: Even when I take out OpenCV and put simple arithmetic accounts just for testing, Kotlin remains extremely slow.