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以及上面那些依赖就可以用了.
生成图片就一句话:
而使用iPhone6S拍摄时,因为分辨率达到了4000*3000,内存更是升到1G多!
其实想想也是,图片拼接也是采用的遍历像素,识别到相似点,然后缝合,当图片越来越多的时候,像素也越来越大,需要遍历的时间和消耗的内存肯定就越来越多了.
当图片分辨率降到1500*1000左右的时候,一部iPhone6S可以轻易的处理超过15张图片.
其实openCV本就是给PC端使用的,配合电脑的GPU,openCV可以实现很强大炫酷的功能,但是在iPhone这样ARM架构上想要实现这样消耗内存的事情就有点勉为其难了.
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这种高清大图的需求来说,就有点捉襟见肘了,个人建议还是放在服务端来做.相关文章推荐
- 利用opencv2.4.10+VS2012和RobHess的sift特征算法实现全景图像拼接
- 利用OpenCV实现图像拼接的代码!
- 【OpenCV学习笔记 024】Stitcher类实现全景图像拼接
- Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
- Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
- Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
- 13款用于拍摄全景照片的iOS应用
- 在iOS利用动画实现全景视图
- Opencv3 Sift和Surf特征实现图像无缝拼接生成全景图像
- Opencv Sift和Surf特征实现图像无缝拼接生成全景图像
- 13款用于拍摄全景照片的iOS应用
- iOS 拍摄照片,使用视听媒体框架AVFoundation实现照片拍摄 —— HERO博客
- 利用opencv读取图片将其作为opengl的纹理图片的实现方法
- iOS学习系列 - 利用ASIHTTPRequest实现异步队列
- 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证
- 越狱iOS设备利用itms-services协议,实现Safari一键安装IPA
- 图像拼接实现镜面效果 opencv完整代码 实现(附实验结果)
- VC++游戏开发1------利用图片拼接实现内存中构建游戏地图,许多游戏编辑器的原理。
- Java实现IOS推送(利用javapns1.6)
- opencv学习笔记(二)vs2010+opencv2.3.1 mfc的实现---利用图片控件显示