我有 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,所以我需要得到与他的框架相同或至少更接近的框架。
谢谢你的帮助!