opencv android预览拍照颜色,OpenCV Android - 颜色问题使用CameraBridgeViewBase

博客详细分析了OpenCV Android在使用CameraBridgeViewBase时遇到的颜色预览问题。问题源于在onPreviewFrame方法中,YUV到RGBA转换的错误解码。通过检查和修改`rgba()`方法,特别是针对NV21和YV12格式的处理,解决了在不同设备和模拟器上的颜色不一致问题。同时提出此解决方案仅作为临时修复,未来需要进一步研究和验证。
摘要由CSDN通过智能技术生成

所以,钻入问题后,我已经找到了问题的根源。

让我们来看看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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值