通过Renderscript ScriptIntrinsicColorMatrix应用Sepia将图像转换为绿色阴影

时间:2016-08-04 21:47:53

标签: android renderscript opencv4android colorfilter

我使用Renderscript固有的colormatrix来应用棕褐色滤镜,但是它将整个图像变为绿色,而不是给它带淡黄色(棕褐色)。这个线程的答案是我目前的测试基础(http://answers.opencv.org/question/99510/opencv4android-31-mat-to-allocation-renderscript/)。将位图转换为OpenCV Mat然后转换为Allocation并传递到renderscript,其中以下内部函数执行其工作:

 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到Mat to Allocation过程中排除了一个错误,因为当我几周前尝试直接在Bitmap上运行内在函数时,我得到了完全相同的绿色问题。

我认为它应该是一个Vector(R,G,B,A)然后乘以我给出的矩阵,但是在这个过程中必须发生一些可疑的事情。

有谁知道这里发生了什么?

2 个答案:

答案 0 :(得分:0)

OpenCV使用B-G-R格式存储图像,而不是R-G-B格式,所以可能只需要交换B和R通道:)

答案 1 :(得分:0)

已经很长时间了,但我认为输入矩阵只是错误的方法。我认为它必须转换。 Renderscript只是以不同的形式预期输入。