我使用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)然后乘以我给出的矩阵,但是在这个过程中必须发生一些可疑的事情。
有谁知道这里发生了什么?
答案 0 :(得分:0)
OpenCV使用B-G-R格式存储图像,而不是R-G-B格式,所以可能只需要交换B和R通道:)
答案 1 :(得分:0)
已经很长时间了,但我认为输入矩阵只是错误的方法。我认为它必须转换。 Renderscript只是以不同的形式预期输入。