XcodeプロジェクトにOpenCV2フレームワークを追加した後、Swiftと統合するためのサンプルとチュートリアルを検索してみました。
同じための良いチュートリアルはありますか?
OpenCVは、C++で記述されたフレームワークです。 Appleの 参照
C++コードをSwiftに直接インポートすることはできません。代わりに、C++コード用のObjective-CまたはCラッパーを作成します。
したがって、SwiftプロジェクトでOpenCVを直接インポートして使用することはできませんが、これは実際には悪いことではありません。すべてが十分に文書化されているフレームワークのC++構文を使用する必要があるためです)ネットの上。
では、どのように進めますか?
OpenCVWrapper.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface OpenCVWrapper : NSObject
+ (UIImage *)processImageWithOpenCV:(UIImage*)inputImage;
@end
OpenCVWrapper.mm(File-> New ... Wizardを使用し、.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カテゴリを使用して、既存のObjective-CクラスをOpenCV機能で拡張できます。たとえば、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"
)
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++と組み合わせて使用できますか?Objective-C .mmファイルのように
iOS 6のCAPTUREパノラマのライブラリ