Android基于OpenCV實(shí)現(xiàn)圖像脫色
脫色
Imgproc.cvtColor(rgb, gray, Imgproc.COLOR_RGB2GRAY)可以快速的實(shí)現(xiàn)圖片脫色,其通過簡(jiǎn)單的計(jì)算將三通道圖像轉(zhuǎn)換成單通道圖像,經(jīng)典的灰度轉(zhuǎn)換公式如下:

但是轉(zhuǎn)換過的圖像存在對(duì)比度丟失,無(wú)法區(qū)分顏色的問題。OpenCV給我們提供另外一種脫色方法Photo.decolor,旨在最大限度的保留圖片對(duì)比度。

原理
論文詳情:www.cse.cuhk.edu.hk/~leojia/pro…
論文PDF:www.computer.org/csdl/pds/ap…
相比于簡(jiǎn)單的使用R/G/B線性組合,作者構(gòu)造了更為復(fù)雜的多項(xiàng)式擬合,向量空間的基底為:[r,g,b,rg,rb,gb,r2,g2,b2],核心就是求取灰度化函數(shù):

API
public static void decolor(Mat src, Mat grayscale, Mat color_boost)
- 參數(shù)一:src,輸入8位三通道圖像。
- 參數(shù)二:grayscale,輸出8位單通道灰度圖。
- 參數(shù)三:color_boost,輸出8位三通道圖像。對(duì)比度增強(qiáng)后的圖像。
操作
/**
* 脫色
* 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實(shí)現(xiàn)的脫色效果圖,在對(duì)比度和顏色保留上效果相差很大。

源碼
以上就是Android基于OpenCV實(shí)現(xiàn)圖像脫色的詳細(xì)內(nèi)容,更多關(guān)于Android OpenCV圖像脫色的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android開發(fā)之在xml中設(shè)置自定義屬性的方法
下面小編就為大家分享一篇Android開發(fā)之在xml中設(shè)置自定義屬性的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android Build Variants 為項(xiàng)目設(shè)置變種版本的方法
下面小編就為大家分享一篇Android Build Variants 為項(xiàng)目設(shè)置變種版本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android開發(fā)使用自定義View將圓角矩形繪制在Canvas上的方法
這篇文章主要介紹了Android開發(fā)使用自定義View將圓角矩形繪制在Canvas上的方法,結(jié)合實(shí)例形式分析了Android自定義view繪制圓角矩形的相關(guān)方法與使用技巧,需要的朋友可以參考下2017-10-10
Android studio將Module打包成Jar的方法
這篇文章主要介紹了Android studio將Module打包成Jar的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-10-10
Android自定義FloatingActionButton滑動(dòng)行為只隱藏不出現(xiàn)的問題小結(jié)
這篇文章主要介紹了Android自定義FloatingActionButton滑動(dòng)行為只隱藏不出現(xiàn)的問題小結(jié),需要的朋友可以參考下2017-01-01
Windows下Flutter+Idea環(huán)境搭建及配置
這篇文章介紹了Windows下Flutter+Idea環(huán)境搭建及配置的方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
Android單項(xiàng)綁定MVVM項(xiàng)目模板的方法
這篇文章主要給大家介紹了關(guān)于Android單項(xiàng)綁定MVVM項(xiàng)目模板的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
詳解Android App卸載后跳轉(zhuǎn)到指定的反饋頁(yè)面的方法
這篇文章主要介紹了Android App卸載后跳轉(zhuǎn)到指定的反饋頁(yè)面的方法,關(guān)鍵點(diǎn)是相關(guān)線程要判斷在目錄被消除以前作出響應(yīng),需要的朋友可以參考下2016-04-04

