您的位置:首页 > 移动开发 > IOS开发

iOS 利用openCV拼接照片实现拍摄全景照片

2016-11-18 17:32 405 查看
现在全景越来越火,既有的设备如日本的理光相机就可以做到拍摄360°全景照片的功能,但是售价也是相当的感人.其实在iPhone手机上我们也可以借助现有的开源库实现这个功能,比如:openCV.

openCV给我们提供了现成的实现方案,而且相当简单:

1.打开冰箱门;

2.把大象装冰箱;

3.合上冰箱门.

开个玩笑.

实现起来也是一样的:

1.导入openCV的SDK;

2.添加需要的SDK;

3.调用一个接口就行了.

首先,可以在openCV的这里下载framework,添加到项目里面,导入

ImageIO.framework

libz.tbd,

CoreVideo.framework,

AssetsLibrary.framework,

CoreMedia.framework.

需要注意的是,我们还需要一个叫做libjpeg.a的静态库,这同样是一个图片处理库,网上很多就不提供链接了.

其实核心功能openCV都已经帮我们实现了,这里提供了一个工程,由于github不能上传超过100M的文件,就只放了这些上去,下载到本地后添加你刚才下好的openCV.framework和libjpeg.a以及上面那些依赖就可以用了.

生成图片就一句话:

UIImage * image = [CVWrapper processWithArray:self.photos];


下面说说关键的部分.

在我的测试中发现,当图片超过4张(每张分辨率为3200*2400)的时候,CPU使用率会飙升到200%,当然这没什么大不了的,关键是内存会暴增:超过600M,导致收到内存警告而crash.

而使用iPhone6S拍摄时,因为分辨率达到了4000*3000,内存更是升到1G多!

其实想想也是,图片拼接也是采用的遍历像素,识别到相似点,然后缝合,当图片越来越多的时候,像素也越来越大,需要遍历的时间和消耗的内存肯定就越来越多了.

当图片分辨率降到1500*1000左右的时候,一部iPhone6S可以轻易的处理超过15张图片.

其实openCV本就是给PC端使用的,配合电脑的GPU,openCV可以实现很强大炫酷的功能,但是在iPhone这样ARM架构上想要实现这样消耗内存的事情就有点勉为其难了.

总结

对于一般简单的图片拼接,使用openCV可以简单又方便的实现,但是对于需要VR这种高清大图的需求来说,就有点捉襟见肘了,个人建议还是放在服务端来做.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios opencv 全景照片