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如何防止apk程序被反編譯(尊重勞動(dòng)成果)
作為Android應(yīng)用開發(fā)者,不得不面對(duì)一個(gè)尷尬的局面,就是自己辛辛苦苦開發(fā)的應(yīng)用可以被別人很輕易的就反編譯出來(lái),天下痛苦之事莫過于此啊,本文會(huì)介紹一種防止apk程序被反編譯的方法,感興趣的朋友可以了解下哦2013-01-01Retrofit和OkHttp如何實(shí)現(xiàn)Android網(wǎng)絡(luò)緩存
這篇文章主要介紹了Retrofit和OkHttp如何實(shí)現(xiàn)Android網(wǎng)絡(luò)緩存,幫助大家更好的理解和學(xué)習(xí)Android開發(fā),感興趣的朋友可以了解下2021-02-02安裝時(shí)加入外部數(shù)據(jù)庫(kù)示例(android外部數(shù)據(jù)庫(kù))
這篇文章主要介紹了android打包安裝時(shí)加入外部數(shù)據(jù)庫(kù)的示例,需要的朋友可以參考下2014-03-03Android ListView實(shí)現(xiàn)上拉加載下拉刷新和滑動(dòng)刪除功能
這篇文章主要為大家詳細(xì)介紹了Android ListView實(shí)現(xiàn)上拉加載下拉刷新和滑動(dòng)刪除功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12一文帶你徹底搞懂Behavior實(shí)現(xiàn)復(fù)雜的視覺聯(lián)動(dòng)效果原理
這篇文章主要為大家介紹了一文帶你徹底搞懂Behavior實(shí)現(xiàn)復(fù)雜的視覺聯(lián)動(dòng)效果原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04android使用webwiew載入頁(yè)面使用示例(Hybrid App開發(fā))
Hybrid App 融合 Web App 的原理就是嵌入一個(gè)WebView組件,可以在這個(gè)組件中載入頁(yè)面,相當(dāng)于內(nèi)嵌的瀏覽器,下面是使用示例2014-03-03詳解Android中實(shí)現(xiàn)ListView左右滑動(dòng)刪除條目的方法
這篇文章主要介紹了Android中實(shí)現(xiàn)ListView左右滑動(dòng)刪除條目的方法,文中分別展示了通過Scroller和NineOldAndroids來(lái)實(shí)現(xiàn)的例子,需要的朋友可以參考下2016-04-04解決Android Studio Gradle Metadata特別慢的問題
這篇文章主要介紹了解決Android Studio Gradle Metadata特別慢的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-03-03