OpenCV入門 (4) - iOSでの利用
iOSでOpenCVを利用する方法を説明します。
・OpenCV 4.1.1
・Xcode 10.3
・Swift 4.5
前回
1. OpenCVフレームワークのダウンロード
以下のサイトの「OpenCV - 4.1.1」の「iOS pack」をクリックします。解凍すると、「onepcv2.framework」が取得できます。
2. Xcodeプロジェクトの作成
Xcodeプロジェクトを作成して、「onepcv2.framework」をリンクします。
(1)Xcodeで新規プロジェクトを作成。
(2)「TARGET」の「Linked Frameworkds and Libraries」に「opencv2.framework」を追加。
3. OpenCV-Swift間のブリッジの作成
「Swift」から「OpenCV」を利用するには、「Objective-C」でブリッジを作成する必要があります。
(1)メニュー「File → New → File」の「Object C File」でObject-Cファイルを作成。
・FIle: OpenCVManager
・FileType: Empty File
・Class: NSObject
Object-Cファイル「OpenCVManager.m」が生成されます。
(2)Object-Cファイル作成時に、「Bridging-Header.h」を作成するかどうかの聞かれるので「Create Bridging Header」をクリック。
「<プロジェクト名>-Bridging-Header.h」が生成され、「Build Setting」の「Objective-C Bridging Header」にもこのファイル名が追加されます。
(3)「OpenCVManager.h」を追加し、「OpenCVManager.m」を「OpenCVManager.mm」に変更。
C++を使うときは拡張子を「mm」にします。
(4)ソースコードを次のように編集。
OpenCVを使って、RGBをGrayに変換するメソッドrgb2gray()を追加しています。
【<プロジェクト名>-Bridging-Header.h】
#import "OpenCVManager.h"
【OpenCVManager.h】
#import <UIKit/UIKit.h>
//OpenCVマネージャ
@interface OpenCVManager : NSObject
+ (UIImage*)rgb2gray:(UIImage*)image;
@end
【OpenCVManager.mm】
#import <opencv2/opencv.hpp>
#import <opencv2/imgcodecs/ios.h>
#import "OpenCVManager.h"
//OpenCVマネージャ
@implementation OpenCVManager
//RGB→Gray
+ (UIImage*)rgb2gray:(UIImage*)image {
cv::Mat img_Mat;
UIImageToMat(image, img_Mat);
cv::cvtColor(img_Mat, img_Mat, cv::COLOR_BGR2GRAY);
return MatToUIImage(img_Mat);
}
@end
OpenCVのヘッダファイルを他のヘッダファイルより先に記述しないと、「Expected identifier」のエラーがでるので、注意してください。
・XCode + OpenCV3.xで、Expected Identifierエラーが出る場合の対処方法
4. OpenCVの動作確認
OpenCVの動作確認として、グレースケール変換を行います。
(1) Xcodeプロジェクトに「sample.jpg」を追加。
(2)ストーリーボードにImageViewを追加。
(3)「ViewController.swift」を次のように編集。
StoryboardのImageViewとIBOutletの関連づけも行います。
import UIKit
//ViewController
class ViewController: UIViewController {
@IBOutlet var imageView : UIImageView!
//ロード時に呼ばれる
override func viewDidLoad() {
//RGB→Gray
let image = UIImage.init(named: "sample.jpg")
self.imageView.image = OpenCVManager.rgb2gray(image)
}
}
(4) 実行。
成功すると、次のようにグレースケールで表示されます。
次回
この記事が気に入ったらサポートをしてみませんか?