在 Swift iOS 中使用 OpenCV



在我的 xcode 项目中添加 OpenCV 2 框架后,我尝试搜索 samlpes 或与 swift 集成的教程。

有没有好的教程?

OpenCV是一个用C++编写的框架。苹果的参考告诉我们,

你不能将C++代码直接导入到 Swift 中。相反,为C++代码创建一个 Objective-C 或 C 包装器。

所以你不能在 swift 项目中直接导入和使用 OpenCV,但这实际上一点也不坏,因为你(需要)继续使用框架的C++语法,这在网络上都有很好的文档。

那么如何进行呢?

  1. 创建一个新的 Objective-C++ 类(.h, .mm)来调用 OpenCV C++

OpenCVWrapper.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface OpenCVWrapper : NSObject
    + (UIImage *)processImageWithOpenCV:(UIImage*)inputImage;
@end

OpenCVWrapper.mm(使用文件 -> 新建...Objective-C 的向导并将 .m 文件重命名为 .mm)

#include "OpenCVWrapper.h"
#import "UIImage+OpenCV.h" // See below to create this
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
@implementation OpenCVWrapper : NSObject
    + (UIImage *)processImageWithOpenCV:(UIImage*)inputImage {
        Mat mat = [inputImage CVMat];
        
        // do your processing here
        ...
        
        return [UIImage imageWithCVMat:mat];
    }
@end

作为创建新类(例如OpenCVWrapper.h/mm)的替代方法,您可以使用Objective-C类别来扩展具有OpenCV功能的现有Objective-C类。例如UIImage+OpenCV类别:

UIImage+OpenCV.h

#import <UIKit/UIKit.h>
#import <opencv2/opencv.hpp>
@interface UIImage (OpenCV)
    //cv::Mat to UIImage
+ (UIImage *)imageWithCVMat:(const cv::Mat&)cvMat;
- (id)initWithCVMat:(const cv::Mat&)cvMat;
    //UIImage to cv::Mat
- (cv::Mat)CVMat;
- (cv::Mat)CVMat3;  // no alpha channel
- (cv::Mat)CVGrayscaleMat;
@end

UIImage+OpenCV.mm

见 https://github.com/foundry/OpenCVSwiftStitch/blob/master/SwiftStitch/UIImage%2BOpenCV.mm

  1. 更新桥接标头,通过导入我们新创建的包装器(#import "OpenCVWrapper.h"),使你创建的所有 Objective-C++ 类都可以使用 Swift

  2. 在 Swift 文件中使用你的包装器:

    let image = UIImage(named: "image.jpeg")
    let processedImage = OpenCVWrapper.processImageWithOpenCV(image)
    

桥头中包含的所有 Objective-C++ 类都可以直接从 Swift 获得。

我在github上有一个演示:

https://github.com/foundry/OpenCVSwiftStitch

它展示了如何使用基于 Swift 的项目的 OpenCV 拼接器。openCV方面没有太多内容,它实际上只是如何将各个部分组合在一起的演示。

由于 Swift 不会直接与C++对话,它使用了一个薄的 Objective-C++ 包装器在 iOS 端和 openCV 端之间进行调解。

为回答这些问题而做出的:
我可以将 Swift 与C++混合使用吗?像目标 - C .mm 文件
用于在 iOS 6 中捕获全景的库

相关内容

  • 没有找到相关文章

最新更新