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



我使用Renderscript固有的颜色矩阵来应用Sepia滤镜,但它会将整个图像变成绿色,而不是黄色(Sepia)。这个线程的答案是我目前测试的基础(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);

我排除了这个复杂的位图到垫子到分配过程中的一个错误,因为几周前我试图直接在位图上运行内部时,我遇到了完全相同的绿色色调问题。

我假设它应该是一个向量(R,G,B,a),然后乘以我给出的矩阵,但在这个过程中一定发生了一些可疑的事情。

有人知道这里发生了什么吗?

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

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

相关内容

  • 没有找到相关文章

最新更新