mediacodec和opencv不匹配的颜色类型

时间:2013-12-17 07:01:44

标签: java android matlab opencv mediacodec

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

我想从同一个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());

虽然GrayIntArrayToMat是将帧转换为灰度的本机函数:

    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,所以我需要在他的框架上获得相同或至少更接近的框架。

感谢您的帮助!

0 个答案:

没有答案