首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从原始图像中裁剪掩码

无法从原始图像中裁剪掩码
EN

Stack Overflow用户
提问于 2022-05-07 10:08:25
回答 1查看 69关注 0票数 0

我正试着从图像中移除背景。为此,我使用了TensorFlow,它为我提供了对象的掩码。在那之后,我从图像中剪切面具,但是效果并不像我想的那么好。

使用TensorFlow进行掩蔽https://github.com/tensorflow/examples/tree/master/lite/examples/image_segmentation/android https://www.tensorflow.org/lite/examples/segmentation/overview

从图像中剪切掩码。

代码语言:javascript
复制
 fun bitmapDstIn(mask: Bitmap?, original: Bitmap?): Bitmap? {
        return try {
            val result =
                original?.let { Bitmap.createBitmap(it.width, it.height, Bitmap.Config.ARGB_8888) }
            val mCanvas = result?.let { Canvas(it) }
            val paint = Paint(Paint.ANTI_ALIAS_FLAG)
            paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
            mask?.let { mCanvas?.drawBitmap(it, 0f, 0f, null) }
            original?.let { mCanvas?.drawBitmap(it, 0f, 0f, paint) }
            paint.xfermode = null
            result
        } catch (e: Exception) {
            println(e.message.toString())
            original
        }
    }

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-09 06:39:01

在从原始位图中剪切掩码之后。我是SRC_OVER,结果位图两次,它隐藏了透明度问题。

代码语言:javascript
复制
fun creatingMasking(original: Bitmap?, mask: Bitmap?): Bitmap? {
            return try {
                var result: Bitmap? =
                    mask?.let { original?.let { it1 -> croppingMaskFromOriginal(it, it1) } }
                val final = result
                result = result?.let { overlay(it, it) }
                result = result?.let { final?.let { it1 -> overlay(it, it1) } }
                result
            } catch (e: Exception) {
                original
            } catch (e: OutOfMemoryError) {
                original
            }
        }


        private fun croppingMaskFromOriginal(base: Bitmap, blend1: Bitmap): Bitmap {
            return try {
                val result: Bitmap =
                    base.copy(Bitmap.Config.ARGB_8888, true)
                val blend = Bitmap.createScaledBitmap(blend1, base.width, base.height, false)
                val p = Paint()
                p.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
                p.shader = BitmapShader(blend, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR)
                p.alpha = 255
                val c = Canvas()
                c.setBitmap(result)
                c.drawBitmap(base, 0f, 0f, null)
                c.drawRect(0f, 0f, base.width.toFloat(), base.height.toFloat(), p)
                result
            } catch (e: Exception) {
                base
            } catch (e: OutOfMemoryError) {
                base
            }
        }

        private fun overlay(base: Bitmap, blend1: Bitmap): Bitmap {
            return try {
                val result: Bitmap =
                    base.copy(Bitmap.Config.ARGB_8888, true)
                val blend = Bitmap.createScaledBitmap(blend1, base.width, base.height, false)
                val p = Paint()
                p.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_OVER)
                p.shader = BitmapShader(blend, Shader.TileMode.MIRROR, Shader.TileMode.MIRROR)
                val c = Canvas()
                c.setBitmap(result)
                c.drawBitmap(base, 0f, 0f, null)
                c.drawRect(0f, 0f, base.width.toFloat(), base.height.toFloat(), p)
                result
            } catch (e: Exception) {

                base
            } catch (e: OutOfMemoryError) {
                base
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72151498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档