阿尔法摄影
Architectural Photography

建筑相机

拍建筑的时候,竖线歪一点,整张照片就散了。建筑相机做的是这件事: 找到画面里的建筑直线,自动把它扶正。

下载 APK Archicamera.apk · 8.6 MB · Android 10+
建筑相机 Archicamera 应用图标

阿尔法摄影工作室在 200 多个项目的拍摄里反复遇到同一件事:手持相机的透视畸变。 建筑摄影对垂直线极其敏感,而当时的相机应用要么不管,要么只有一个手动调平的角度仪。

建筑相机是为此写的 Android 应用。用 OpenCV 在实时预览里检测直线和消失方向, 推断相机的三维姿态,再反解出能保持几何真实的透视变换。

取景区为示例照片,界面元素按实际布局复刻。

系统要求
Android 10 及以上
架构
arm64-v8a
核心技术
Camera2 + OpenCV 4.10
安装包
8.6 MB
  • 安装方法:下载后点击安装。系统会提示「未知来源应用」,在弹出的设置里允许当前浏览器或文件管理器安装即可。
  • 校验值:SHA-256 1459bb4053c9db312853bfbb204b786848f50228922baf1558248d0c7c0d1a2f
  • 这是自用工具,未上架应用商店,使用调试签名,请自行确认来源可信后再安装。
  • 需要相机权限。应用不联网,不收集任何数据,照片只写入手机相册。

三种矫正模式

一点

画面里有一条主要消失方向时使用。矫正横滚、俯仰和主方向朝向,纵深方向的汇聚保留 —— 也就是保留人眼看到的那种纵深,不把它压成平面。

两点

能判断出两组线段时使用。矫正横滚与俯仰,横向汇聚保留。适合有明确建筑转角的场景。

三点

不矫正,保存相机原始 JPEG。当构图本身是有意为之的仰拍时,三点可以避免把作者想要的透视关系抹平。

它怎么处理

自动模式在预览流上逐帧检测线段,合并重复边缘后做一致性拟合,判断画面属于一点、两点还是 不该自动介入的状态,切换用迟滞避免在临界处来回跳。

压成平面 竖线平行 · 纵深丢失 消失点 保留纵深 竖线汇聚 · 透视保留
它不做「压平」,而是恢复相机真实姿态后重投影。楼是正的,纵深还在。

拍照走的是相机最大的 JPEG 输出。原始字节与 EXIF 原样保留,矫正结果另行写入相册 的 Archicamera 目录,两者互不覆盖 —— 也就是说,任何时候都能拿到未经处理的原片。

严格裁切是另一个取舍:输出矩形完全落在有效投影内,所以拍不到原本在画面边缘的内容。 宁可少拍,也不裁掉建筑的一部分。无法满足时,拍照按钮会直接禁用,而不是给一张 缺了屋檐的照片。

最大内接矩形 有效投影(任意四边形) 舍弃的边缘
输出矩形要求完整落在有效投影内,二分搜索最大尺寸。红色是明确放弃的边缘。

已知的边界

自动判断依赖可见的建筑直线和近似正交的结构。现场没有足够线条时(比如纯天空、 纯植被、弧形幕墙),应用会保留竖线矫正,其余交给手动微调。 曝光之间如果手机有移动,预览和成片可能有差异。

相机是逐台标定的,还没有在所有机型上做过实拍验证。目前主要在实机验证, 不同镜头的畸变表现和标定参数仍有差异。

更多

建筑相机是怎么做透视矫正的

技术原理、模式判断逻辑与实现取舍。