您的位置:首页技术文章
文章详情页

Android基于OpenCV实现图像脱色

【字号: 日期:2022-09-17 18:31:47浏览:13作者:猪猪
目录脱色原理API操作效果源码脱色

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

Android基于OpenCV实现图像脱色

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

Android基于OpenCV实现图像脱色

原理

论文详情: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],核心就是求取灰度化函数:

Android基于OpenCV实现图像脱色

API

public static void decolor(Mat src, Mat grayscale, Mat color_boost) 参数一:src,输入8位三通道图像。 参数二:grayscale,输出8位单通道灰度图。 参数三:color_boost,输出8位三通道图像。对比度增强后的图像。操作

/** * 脱色 * 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 = mAdapterval 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 = trueGlobalScope.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实现的脱色效果图,在对比度和颜色保留上效果相差很大。

Android基于OpenCV实现图像脱色

源码

github.com/onlyloveyd/…

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

标签: Android
相关文章: