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