我的摄像机应用程序确实在横向模式下录制,但前置摄像头预览常规图像,但实际录制在轴上镜像(翻转或倒置)。
在普通后置摄像头上一切正常。
任何人都可以建议我避免它的方法吗?任何建议或源代码都会有很大帮助。谢谢你。
坏消息:这个镜像被硬编码到相机服务中,并且不能被禁用。
好消息:如果您使用的是最近的 API(API 级别 >= 14),您可以轻松使用 TextureView 将预览图像镜像回原始图像。查看 Android 文档中的TextureView 示例,然后使用setTransform设置镜像变换。这会将预览图像恢复为未镜像的原始图像。
请注意,镜像变换与在 X 轴上具有 -1 比例的缩放变换相同。
如果您使用的是较旧的 API 版本,则可以对 SurfaceView 执行相同操作(使用setScaleX,API 级别 >= 11)。
尝试将转换矩阵应用于 TextureView。根据防止前置摄像头翻转
这适用于 API 级别 >= 14
如果您使用此代码,您可以将相机图片镜像更改为精确预览
ImageCapture.Metadata metadata = new ImageCapture.Metadata();
metadata.setReversedHorizontal(true); // This method will fix mirror issue
options = new ImageCapture.OutputFileOptions.Builder(imageOutFile).setMetadata(metadata).build();
在 OpenCV JavaCameraView 中;
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
imageMat = inputFrame.rgba().t();
if (//horizontal reverse)
Core.flip(imageMat, imageMat, 1);
else //for vertical reverse
Core.flip(imageMat, imageMat, -1);