Android基于OpenCV实现图像脱色

Android基于OpenCV实现图像脱色

目录

    脱色

    Imgproc.cvtColor(rgb, gray, Imgproc.COLOR_RGB2GRAY)可以快速的实现图片脱色,其通过简单的计算将三通道图像转换成单通道图像,经典的灰度转换公式如下:

    但是转换过的图像存在对比度丢失,无法区分颜色的问题。OpenCV给我们提供另外一种脱色方法Photo.decolor,旨在最大限度的保留图片对比度。

    原理

    论文详情:www.cse.cuhk.edu.hk/~leojia/pro…

    论文PDF:www.computer.org/csdl/pds/ap…

    相比于简单的使用R/G/B线性组合,作者构造了更为复杂的多项式拟合,向量空间的基底为:[r,g,b,rg,rb,gb,r2,g2,b2],核心就是求取灰度化函数:

    API

    public static void decolor(Mat src, Mat grayscale, Mat color_boost) 
    

    操作

    /**
     * 脱色
     * author: yidong
     * 2020/12/5
     */
    class DecolorActivity : AppCompatActivity() {
    
        private val mBinding: ActivityDecolorBinding by lazy {
            ActivityDecolorBinding.inflate(layoutInflater)
        }
    
        private val mList = mutableListOf<ImageTextObject>()
        private lateinit var mAdapter: ImageTextAdapter
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(mBinding.root)
            mAdapter = ImageTextAdapter(this, mList)
            mBinding.container.adapter = mAdapter
            val bgr = Utils.loadResource(this, R.drawable.ceil)
            val rgb = Mat()
            Imgproc.cvtColor(bgr, rgb, Imgproc.COLOR_BGR2RGB)
            val gray = Mat()
            val dst = Mat()
            val boost = Mat()
            mBinding.isLoading = true
            GlobalScope.launch(Dispatchers.IO) {
                Imgproc.cvtColor(rgb, gray, Imgproc.COLOR_RGB2GRAY)
                Photo.decolor(rgb, dst, boost)
                launch(Dispatchers.Main) {
                    mList.add(ImageTextObject(rgb, "原图"))
                    mList.add(ImageTextObject(gray, "RGB2GRAY"))
                    mList.add(ImageTextObject(dst, "DeColor"))
                    mList.add(ImageTextObject(boost, "ColorBoosting"))
                    mAdapter.notifyItemRangeInserted(0, 4)
                    mBinding.isLoading = false
                }
            }
        }
    }
    

    效果

    分别采用decolor和RGB2GRAY实现的脱色效果图,在对比度和颜色保留上效果相差很大。

    源码

    github.com/onlyloveyd/…

    以上就是Android基于OpenCV实现图像脱色的详细内容,更多关于Android OpenCV图像脱色的资料请关注趣讯吧其它相关文章!

    发布于 2021-06-20 09:25:06
    收藏
    分享
    海报
    0 条评论
    174
    上一篇:Android仿微信通话背景的高斯模糊效果 下一篇:SpringBoot配置系统全局异常映射处理
    目录

      推荐阅读

      0 条评论

      本站已关闭游客评论,请登录或者注册后再评论吧~

      忘记密码?

      图形验证码