2016-08-04 95 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