我使用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),然后乘以我给出的矩阵,但是一定会发生一些可疑的事情。
有没有人知道这里发生了什么?
是源从文件或摄像头的位图?如果相机不应该使用YUV格式? –
它来自文件的位图。当我在这个星期前做了一个OpenCV Mat rgba的时候,我把它变成了一个位图argb_8888,并且出现了同样的问题。 – AllBecomesGood
更新:当直接从Camerafeed进行流式处理并让Renderscript执行转换(YUV到RGB,然后应用colormatrix并转换为位图以显示在屏幕上)时,我会得到相同的奇怪绿色色调。我怀疑涉及的Bitmaps,也许它保存像素的方式是不同的,并导致怪异。 – AllBecomesGood