现在全景越来越火,既有的设备如日本的理光相机就可以做到拍摄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这种高清大图的需求来说,就有点捉襟见肘了,个人建议还是放在服务端来做.