在我的xcode项目中添加OpenCV 2框架后,我尝试搜索samlpes或与swift集成的教程。
有没有很好的教程呢?
OpenCV是用C ++编写的框架。苹果的参考资料告诉我们
您不能将C 代码直接导入Swift。而是为C 代码创建一个Objective-C或C包装器。
因此,您不能直接在一个快速的项目中导入和使用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
通过导入新创建的包装器(),更新Bridging-Header,使您创建的所有Objective-C ++类均可用于Swift#import "OpenCVWrapper.h"
#import "OpenCVWrapper.h"
在您的Swift文件中使用包装器:
let image = UIImage(named:“ image.jpeg”)let createdImage = OpenCVWrapper.processImageWithOpenCV(image)
桥头中包含的所有Objective-C ++类都可以直接从Swift获得。