OpenCV for iOSを使ってiphoneのカメラから取得した映像をリアルタイム処理して表示します.
環境
- iOS: v8.3
- Xcode: 6.3.1
- OpenCV for iOS: v2.4.9
OpenCV for iOSの導入
まずはOpenCV公式ホームページからOpenCV for iOSをダウンロードします.
解凍するとopencv2.frameworkが出てくるのでこれを利用します.
Xcodeを立ち上げ,Single View Appricationにてプロジェクトを新規作成,さきほど解凍したファイルをtargetのBuild Phase内のLink Binary With Librariesに追加します.
その他,今回は
- QuartzCode.framework
- CoreImage.framework
- CoreMedia.framework
- CoreVideo.framework
- Accelerate.framework
- AssetsLibrary.framework
- AVFoundation.framework
- UIKit.framework
- Foundation.framework
- CoreGraphics.framework
といったフレームワークを使用するので,各々追加します.
これで,iOSデバイスカメラから取得した映像をopenCVで処理する下準備が整いました.
カメラ画像処理
ビューコントローラにカメラコントローラを追加し、ビューがロードされたときに初期化を行います.
ViewController.hにて以下を記述
//ViewController.h
#import <UIKit/UIKit.h>
#import <opencv2/highgui/ios.h>
#import <opencv2/opencv.hpp>
@interface ViewController : UIViewController<CvVideoCameraDelegate>
{
CvVideoCamera* videoCamera;
...
}
...
@end
ViewController.mmにて以下を記述.
//ViewController.mm
- (void)viewDidLoad
{
[super viewDidLoad];
videoCamera = [[CvVideoCamera alloc]
initWithParentView:imageView];
videoCamera.delegate = self;
videoCamera.defaultAVCaptureDevicePosition =
AVCaptureDevicePositionBack;
videoCamera.defaultAVCaptureSessionPreset =
AVCaptureSessionPreset352x288;
videoCamera.defaultAVCaptureVideoOrientation =
AVCaptureVideoOrientationPortrait;
videoCamera.defaultFPS = 30;
[videoCamera start];
}
以上の処理にて,使うカメラの種類(front/back),カメラ画像の向き,FPS,解像度等を指定します.
なお,今回はcv::Mat等c++の関数を利用するので拡張子を.mmに変更します.
最後の[videoCamera start]が呼ばれるとカメラが起動します.しかし,この状態では表示が横に回転している等,不具合が生じている場合があります.これは,viewDidLoad関数が呼び出されたあとに,カメラの向き,解像度等の取得が行われるため,設定がうまくいっていないことによります.
今回は[videoCamera start]の代わりに
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(startCamera:) userInfo:nil repeats:NO];
- (void)startCamera:(NSTimer *)timer
{
[videoCamera start];
}
を記述し,呼び出すタイミングをずらしています.
あとはprocessImage関数内に,cvの処理を記載すればOKです.
今回のコードを利用し,特定の色以外をグレースケール化するコードをgithubにおきましたhttps://github.com/yukiB/extractColorOpenCV-IOS.
画面をタップすると,色抽出の閾値をsliderで制御できるようになります.