OpenCV is a framework written in C ++. Apple link let us know that
You cannot import C ++ code directly into Swift. Instead, create an Objective-C or C wrapper for C ++ code.
so you cannot directly import and use OpenCV in a fast project, but actually itβs not at all bad because you (need) continue to use C ++ syntax for a framework that is pretty well documented throughout the network.
So how do you go on?
- Create a new Objective-C ++ class (.h, .mm ) to call C ++ OpenCV
OpenCVWrapper.h
#import <UIKit/UIKit.h> #import <Foundation/Foundation.h> @interface OpenCVWrapper : NSObject + (UIImage *)processImageWithOpenCV:(UIImage*)inputImage; @end
OpenCVWrapper.mm (use File -> New ... Wizard for Objective-C and rename the .m file to .mm)
#include "OpenCVWrapper.h" #import "UIImage+OpenCV.h"
As an alternative to creating new classes, such as the OpenCVWrapper.h / mm example, you can use the Objective-C categories to extend existing Objective-C classes with OpenCV functions. For example, the category 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
See https://github.com/foundry/OpenCVSwiftStitch/blob/master/SwiftStitch/UIImage%2BOpenCV.mm
Update Bridging-Header to create all Objective-C ++ classes that you created for Swift by importing newly created wrappers ( #import "OpenCVWrapper.h" )
Use your wrapper in your Swift files:
let image = UIImage (named: "image.jpeg") let processingImage = OpenCVWrapper.processImageWithOpenCV (image)
All Objective-C ++ classes included in the bridge header are available directly from Swift.
Tomas Camin Jun 18 '15 at 7:44 2015-06-18 07:44
source share