2016-08-04 54 views
0

我使用Renderscript內在的顏色矩陣來應用棕褐色濾鏡,但它將整個圖像變成綠色,而不是給它呈現淡黃色(棕褐色)。這個線程的答案是我目前測試的基礎(http://answers.opencv.org/question/99510/opencv4android-31-mat-to-allocation-renderscript/)。位圖變成了OpenCV的墊然後進入分配和傳遞到的renderScript在以下內在做的工作:通過Renderscript應用棕褐色ScriptIntrinsicColorMatrix將圖像轉換爲綠色陰影

Element element = Element.RGBA_8888(mRS); 
ScriptIntrinsicColorMatrix colorMatrix = ScriptIntrinsicColorMatrix.create(mRS, element); 
final Matrix4f mSepia = new Matrix4f(new float[]{ 
       0.189f, 0.769f, 0.393f, 0f, 
       0.168f, 0.686f, 0.349f, 0f, 
       0.131f, 0.534f, 0.272f, 0f, 
       0.000f, 0.000f, 0.000f, 1f}); 
colorMatrix.setColorMatrix(mSepia); 
colorMatrix.forEach(inputAllocation, outputAllocation); 

我排除在這個複雜的位圖的錯誤墊分配過程中,因爲當我試着幾個星期後直接在Bitmap上運行內在函數,我得到了完全相同的綠色問題。我認爲它應該是一個矢量(R,G,B,A),然後乘以我給出的矩陣,但是一定會發生一些可疑的事情。

有沒有人知道這裏發生了什麼?

+0

是源從文件或攝像頭的位圖?如果相機不應該使用YUV格式? –

+0

它來自文件的位圖。當我在這個星期前做了一個OpenCV Mat rgba的時候,我把它變成了一個位圖argb_8888,並且出現了同樣的問題。 – AllBecomesGood

+0

更新:當直接從Camerafeed進行流式處理並讓Renderscript執行轉換(YUV到RGB,然後應用colormatrix並轉換爲位圖以顯示在屏幕上)時,我會得到相同的奇怪綠色色調。我懷疑涉及的Bitmaps,也許它保存像素的方式是不同的,並導致怪異。 – AllBecomesGood

回答

0

OpenCV的商店使用B-G-R格式,而不是R-G-B中的一個圖像,所以也許你只需要調換B和R聲道:)

+0

如果只是這很容易!還是)感謝你的建議! :) – AllBecomesGood

+0

我試過了,這是一個常見的被低估的問題 – cmaster11