OpenGL ES 2不适用于Android API23

use*_*615 6 android opengl-es opencv4android

在我的应用程序中,我正在做一些图像像素操作.我的代码基于这个例子.

我所做的唯一改变是将其更改FRAGMENT_SHADER为灰度,它看起来像这样:

private static final String FRAGMENT_SHADER =
        "#extension GL_OES_EGL_image_external : require\n" +
        "precision mediump float;\n" +      // highp here doesn't seem to matter
        "varying vec2 vTextureCoord;\n" +
        "uniform samplerExternalOES sTexture;\n" +
        "void main() {\n" +
        "    vec4 tc = texture2D(sTexture, vTextureCoord);\n" +
        "    gl_FragColor.r = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
        "    gl_FragColor.g = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
        "    gl_FragColor.b = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
        "}\n";
Run Code Online (Sandbox Code Playgroud)

问题:我从Galaxy s7设备上录制了一段视频,录制后我拍摄了录制的视频,我正在从2个不同设备(Galaxy S7和Galaxy s3)中读取第一帧,我发现像素值绝对是这些设备之间有所不同

有人知道为什么会这样吗?我能做些什么来解决这个问题,因为我的算法由于这种差异而失败了?

更新:

这是我得到的差异的例子.

Gaaxy S3: 矩阵213,214,212,214,216,214,213,212,212,212,213,214,214,214,213,213,214,214,214,214,212,213的一部分,212,213,212,214,214,212,212,210,211,210,211,210,211,211,214,211,214,213,213,214,214,216,216,216,215 ,215,216,212,213,213,214,213,213,212,211,209,209,207,208,208,210,211,209,207,209,210,217,219,216,209 ,209,210,210,210,211,209,207,205,205,206,210,210,220,211,202,210,211,206,206,209,210,211,213,219,222 ,216,217,217

非零像素数:1632816

所有像素的总和:3.1834445E8

Galaxy S7: Matrix的相同部分,如Galaxy 3 164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164 ,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164 ,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164 ,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164 ,164,164,164,164,164

非零像素数:1063680

所有像素的总和:1.6593408E8

UPDATE2:

我发现收到的图像绝对毁了,但视频录制得很好.这是Galaxy S3的好照片: 在此输入图像描述

这是我从Galaxy S7获得的图像(相同帧#) 在此输入图像描述

我根本不知道这里发生了什么,但我知道所有Marshmallow设备的最后一张图片都是一样的(Galaxy S6,S7和华为)

use*_*615 1

好吧,经过一周的努力寻找解决方案,找到了!

正如我所说,我基于 bigflake 示例,在这个示例中,有一个反转框架的选项,并且在示例中完成了操作。

通过将 invert 更改为 false,问题得到解决。

如果有人能向我解释框架反转的原因,以及为什么决定默认将其设置为“true”,我将非常感激。

感谢您的帮助!

如果还不够清楚,这是我所做的更改:

outputSurface.drawImage(false);
Run Code Online (Sandbox Code Playgroud)