1

我有 2 个应用程序,1 个我使用 OpenCV 在 Matlab(c)上实现,第二个是使用 MediaCodec 在 eclipse(android,java)上实现。

我想从同一个 mp4 视频中解码第一帧(我需要超过 1 帧,我只查看第一帧以进行调试,这就是我选择 MediaCodec 和 OpenCV 的原因)。

在 Matlab 中,我这样做:

        currFrame = videoFReader.read;

        % Convert to grayscale
        %currGray = Convert_Movie_To_Gray(currFrame); % Works on a single frame as well                         
        currGray = cv.cvtColor(currFrame,'BGR2GRAY');    

而 currFrame 是Frame[0]currGray 是灰度帧。

在 Eclipse 中,我这样做:

        GLES20.glReadPixels(0, 0, mWidth, mHeight, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE,
            mPixelBuf);
        mPixelBuf.rewind();

        int[] colors = mColorSwapBuf;
        mPixelBuf.asIntBuffer().get(colors);
        NativeClass.GrayIntArrayToMat(colors, mainMat.getNativeObjAddr());

whileGrayIntArrayToMat是将帧转换为灰度的本机函数:

    for(int i = 0 ; i< out->cols * out->rows; i++)
        {
            int col = inputarray[i];
            int R,G,B;
            B = (col >> 16) & 0xff;
            G = (col >> 8) & 0xff;
            R = col & 0xff;
            inputarray[i] = (int)(((((R*0.3) + (G*0.59) + (B*0.11)))));
            res[i] = inputarray[i];
        }

我的问题是我在两个例子中没有得到相同的颜色。如果我查看第一行的前 10 列,我会得到这个(灰度帧):

[27, 27, 27, 27, 27, 27, 29, 30, 31, 32] - in Matlab

[27, 28, 27, 29, 28, 29, 30, 31, 31, 31] - in Eclipse

我的参考是 Matlab,所以我需要得到与他的框架相同或至少更接近的框架。

谢谢你的帮助!

4

0 回答 0