所以,钻入问题后,我已经找到了问题的根源。
让我们来看看OpenCV JavaCameraView类和它的CameraBridgeViewBase基类。 问题在于,在onPreviewFrame方法中收到的byte[]数组中的相机帧被错误地解码。
的代码的确切地方,解码过程发生是Mat rgba()法在内部JavaCameraFrame类JavaCameraView的实现:
public Mat rgba() {
Imgproc.cvtColor(mYuvFrameData, mRgba, Imgproc.COLOR_YUV2RGBA_NV21, 4);
return mRgba;
}
正如我们看到的,Imgproc.cvtColor(...)方法用于将帧从YUV转换为RGBA。 NV21 YUV -> RGBA转换发生在那里。在初始化过程中,我们将格式设置为NV21,所以这应该是正确的。此外,every Android device should support NV21。另外,我们可以检查设备是否接受使用调试器的格式为:
protected boolean initializeCamera(int width, int height) {
...
params.setPreviewFormat(ImageFormat.NV21);
...
mCamera.setParameters(params);
...
params = mCamera.getParameters();
Log.d(TAG, String.format("Actual preview format is 0x%X", params.getPrev