camera sensor readout position(flip/mirror)

本文探讨了在显示设备上图像方向错误的原因,并提供了通过调整传感器读取位置和使用软件补救措施的方法来纠正图像方向的技术解决方案。

预览过程:景物(sence)通过镜头(lens)生成的光学图像投射到图像传感器(sensor)上,

图像以pixel为单位通过MIPI/DVP接口传输到VFE,经过external memory,最后经过MDP

然后将图片显示到屏上。偶尔会出现这样情况:在屏上显示的图像方向不对。


这是因为模组厂不严格根据sensor厂给出的sensor放置位置打样。


一般情况是建议模组厂能够正确打样,若因为各种原因不能在模组上修改,在软件

上还是可以补救.


情况1: 图像180度颠倒(flip)/图像左右颠倒(mirror)/flip&mirror

可以修改sensor readout position,sensor会提供相应的寄存器

如下图说明,pixel是从1 pin locate in the upper left 取出,sensor支持从sensor那个位置

来读取pixel.

若从左下角读取pixel,得到的图像方向正确;

若从左上角读取pixel,得到的图像180度颠倒;

若从右下角读取pixel,得到的图像左右颠倒;

若从右上角读取pixel,得到的图像既180度颠倒也左右颠倒。



情况2:图像顺时针转了90度/逆时针转90度

这种通过sensor寄存器是转不过来的,为什么转不过来呢?看懂以上的原理,原因就显而易见了。

一般强烈建议是模组修改,若平台支持支持转角度,软件也可以补救。
相机镜像翻转在不同场景下有不同的实现方法: - **Java实现图片镜像翻转**:可以使用`ImageMirrorUtils`类中的`mirrorImage`方法,该方法接收原图片路径翻转后图片输出路径作为参数。通过遍历图片的每一行像素,交换左右两侧的像素值,实现图片的左右镜像翻转。示例代码如下: ```java public class ImageMirrorUtils { /** * 图片镜像翻转 * * @param source 原图片路径 * @param target 翻转后图片输出路径 */ public static void mirrorImage(String source, String target) { File file; BufferedImage image; try { file = new File(source); image = ImageIO.read(file); int width = image.getWidth(); int height = image.getHeight(); for (int j = 0; j < height; j++) { int l = 0, r = width - 1; while (l < r) { int pl = image.getRGB(l, j); int pr = image.getRGB(r, j); image.setRGB(l, j, pr); image.setRGB(r, j, pl); l++; r--; } } file = new File(target); ImageIO.write(image, getSuffix(source), file); } catch (IOException e) { e.printStackTrace(); } } private static String getSuffix(String fileName) { return fileName.substring(fileName.lastIndexOf(SymbolConstants.POINT_SYMBOL) + 1); } } ``` - **Camera2拍照镜像功能实现**:在`PhotoModule.java`中实现保存拍照的功能时,调用`saveFinalPhoto(final byte[] jpegData, NamedEntity name, final ExifInterface exif, CameraProxy camera)`,并使用`mtx.postScale(-1, 1)`这个水平旋转的方法,可将拍照的byte数组数据实现左右水平旋转功能[^2]。 - **利用OpenCV实现图像镜像**:使用OpenCV的`flip()`函数可实现图像的水平镜像(水平翻转)、垂直镜像(垂直翻转)。通过设置`flipCode`参数来控制翻转方式:若`flipCode`大于0,表示绕y轴翻转,实现水平镜像;若`flipCode`等于0,表示绕x轴翻转,实现垂直镜像;若`flipCode`小于0,表示同时绕x轴y轴翻转,实现垂直水平镜像[^4]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值