Swift - 使用OpenCV2进行图片拼接

Home / C++ MrLee 2015-11-7 5330

1,OpenCV介绍
OpenCV的全称是:Open Source Computer Vision Library。是一个开源的跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法。
其应用领域有: 1、人机互动 2、物体识别 3、图像分割 4、人脸识别 5、动作识别 6、运动跟踪 7、机器人 8、运动分析 9、机器视觉 10、结构分析 11、汽车安全驾驶
 

swift_img

2,使用OpenCV进行图片拼接 下面通过一个样例演示如何使用OpenCV将多张照片拼接成一个全景图。注意:照片与照片间要有重合的部分,这样就能通过OpenCV进行分析识别,从而实现自动拼接。
(1)下面是拍的几张原始照片

原文:Swift - 使用OpenCV2进行图片拼接(将多张照片合并成全景图)

 

原文:Swift - 使用OpenCV2进行图片拼接(将多张照片合并成全景图)

 

原文:Swift - 使用OpenCV2进行图片拼接(将多张照片合并成全景图)

 

原文:Swift - 使用OpenCV2进行图片拼接(将多张照片合并成全景图)

(2)下面是拼接后的照片

原文:Swift - 使用OpenCV2进行图片拼接(将多张照片合并成全景图)

3,操作步骤
(1)首先下载最新的OpenCV框架:opencv2.framework.zip。并将其添加到项目中来。

原文:Swift - 使用OpenCV2进行图片拼接(将多张照片合并成全景图)

(2)下载第三方的Objective-C封装类:OpenCVSwiftStitch
由于我们需要使用OpenCV,但Swift又不能直接调用C++。所以便需要使用Objective-C来做为中间层,让Swift通过Objective-C来调用OpenCV。

好在github上已经有人提供了相关的封装类,我们直接把如下文件导入到项目即可。

原文:Swift - 使用OpenCV2进行图片拼接(将多张照片合并成全景图)


(3)记得把CVWrapper.h添加到桥接头文件bridge.h中
#import "CVWrapper.h"

 
(4)下面使用就很简单了,把UIImage交给CVWrapper就可以了
import UIKit
 
class ViewController: UIViewController {
 
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var spinner: UIActivityIndicatorView!
     
    override func viewDidLoad() {
        super.viewDidLoad()
    }
     
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        stitch()
    }
     
    func stitch() {
        //由于图片拼接很费时,显示环形进度条
        self.spinner.startAnimating()
        //在后台队列拼接图片
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
            let image1 = UIImage(named:"IMG_4247.jpg")
            let image2 = UIImage(named:"IMG_4248.jpg")
            let image3 = UIImage(named:"IMG_4249.jpg")
            let image4 = UIImage(named:"IMG_4250.jpg")
             
            let imageArray:[UIImage!] = [image1,image2,image3,image4]
             
            let stitchedImage:UIImage = CVWrapper.processWithArray(imageArray) as UIImage
             
            self.imageView.image = stitchedImage
             
            //停止环形进度条效果
            self.spinner.stopAnimating()
        }
    }
     
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

项目地址:  2015110520141954558
转载于:航歌

本文链接:https://www.it72.com/6807.htm

推荐阅读
最新回复 (0)
返回