Android 如何通过OpenCV实现无缝克隆?
我想在Android上使用opencv来实现SeamlesClone,因为我没有opencv的经验,调试的结果不是我所期望的(我在python上得到了正确的结果,但Android是完全错误的)。下面是我的代码,你能给我一些线索吗,或者android上的示例代码?谢谢Android 如何通过OpenCV实现无缝克隆?,android,opencv,opencv4android,Android,Opencv,Opencv4android,我想在Android上使用opencv来实现SeamlesClone,因为我没有opencv的经验,调试的结果不是我所期望的(我在python上得到了正确的结果,但Android是完全错误的)。下面是我的代码,你能给我一些线索吗,或者android上的示例代码?谢谢 fun compound(originBm: Bitmap, dstBm: Bitmap, maskBm: Bitmap): Bitmap? { var matSrc = Mat()
fun compound(originBm: Bitmap, dstBm: Bitmap, maskBm: Bitmap): Bitmap? {
var matSrc = Mat()
Utils.bitmapToMat(originBm, matSrc)
var matDst = Mat()
Utils.bitmapToMat(dstBm, matDst)
var matMask = Mat()
Utils.bitmapToMat(maskBm, matMask)
cvtColor(matMask, matMask, COLOR_RGBA2GRAY, 1)
var point = Point(matDst.cols() / 2.0, matDst.rows() / 2.0)
val matBlend = Mat.zeros(matDst.size(), matDst.type())
seamlessClone(matSrc, matDst, matMask, point, matBlend, MIXED_CLONE)
var bitmap = createBitmap(matBlend.cols(), matBlend.rows(), ARGB_8888)
Utils.matToBitmap(matBlend, bitmap)
return bitmap
}
1024是调试窗口的最大高度,因此窗口的右上角不是真正的宽度和高度。
原始BM(1200px*1200px):DstBm(2960*3946):
MaskBm(1200*1200):,结果tbm:
无论我如何修改maskbm并向其添加一些黑色区域,生成的图形看起来像是被高斯模糊了。我的OpenCV sdk来自:OpenCV-4.1.0-android-sdk.zip。
我在我的第一个活动中初始化opencv:
private val mLoaderCallback = object : BaseLoaderCallback(this) {
override fun onManagerConnected(status: Int) {
when (status) {
LoaderCallbackInterface.SUCCESS -> {ToastUtils.showShort("OpenCV loaded successfully")}
else -> {super.onManagerConnected(status)}
}
}
}
override fun onResume() {
super.onResume()
if (!OpenCVLoader.initDebug()) {
println("Internal OpenCV library not found. Using OpenCV Manager for initialization")
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback)
} else {
println("OpenCV library found inside package. Using it!")
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS)
}
}
通过上面的代码转换,结果现在是正确的
var matSrc = Mat()
Utils.bitmapToMat(originBm, matSrc)
cvtColor(matSrc, matSrc, COLOR_RGBA2RGB, 3)//make ARGB bitmap to RGB Mat
dst also need covert.