- 公開日:2015年07月14日
記事概要
objective-cでOpenCVの使い方を学習します。
その1に続きです。
開発環境
- Xcode 6.4
- Swift 1.2
難易度
★★★★☆(中級)
opencvのダウンロード
http://opencv.org/downloads.html OpenCV for iOSをダウンロードします。
ダウンロードしたopencv2.frameworkをプロジェクトから参照します。
プロジェクトフォルダ → TARGETS[opencv-obj-c] → Build Phaseを選択します。
Link Binary With Librariesの+を押し、add otherボタンからフレームワークを追加します。
OpenCVの実装
ViewController.mをViewController.mmに変更します。これによりC++が利用可能になります。
opencv の c++ ライブラリを使うための対策です。
[UIImageToMat]と[MatToUIImage]を使用するため、ライブラリをインポートします。
[UIImageToMat]はUIImage を cv::Mat に変換します。
[MatToUIImage]はcv::Mat を UIImage に変換します。
このパターンがopencvの基本的な使い方になります。
サンプルとしてグレースケールの実装を行ないます。
【objective-c/ViewController.mm】
#import "ViewController.h"
#import <opencv2/opencv.hpp>
#import <opencv2/imgcodecs/ios.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    UIImage* sampleImg = [UIImage imageNamed:@"sample"];
    self.imageview.image = sampleImg;
    
    // 元画像データを保存
    self.originalimageview = [UIImage imageWithCGImage:[self.imageview CGImage]];
    
    // 初期はNO
    self.imageswitch.on = NO;
    
    [self.imageswitch addTarget:self action:@selector(switchBtn:) forControlEvents:UIControlEventValueChanged];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (void)switchBtn:(id)sender
{
    NSLog(@"pushed");
    UISwitch *sw = sender;
    if (sw.on) {
        // グレースケール変換
        UIImage *edge = [self getEdgeImg:self.imageview.image];
        self.imageview.image = edge;
        //NSLog(@"スイッチがONになりました.");
    } else {
        self.imageview.image = self.originalimageview.image;
        //NSLog(@"スイッチがOFFになりました.");
    }
    
}
- (UIImage *)getEdgeImg:(UIImage *) img{
    
    // UIImage を cv::Mat に変換
    cv::Mat mat;
    UIImageToMat(img, mat);
    
    // グレイスケール変換
    cv::Mat gray;
    cv::cvtColor(mat, gray, CV_BGR2GRAY);
    
    // 画像のエッジを検出
    cv::Mat edge;
    cv::Canny(gray, edge, 200, 100);
    
    UIImage *edgeImg = MatToUIImage(edge);
    
    return edgeImg;
}
@end
ビルドし、アプリを立ち上げてみましょう。
SwitchがOFFの状態
SwitchがONの状態
OpenCVが実装できていますね。
以上です。
Objective-cでのiphoneアプリ開発にオススメの本
iphone開発の経験があり、より優れた設計のiphoneアプリを作りたい人向けの本です。
iphoneプログラミングをパーツ化するテクニックを学べます。アプリを量産したい人には必須の本です。
OpenCvでの開発にオススメの本
OpenCVはこの本一択です。長く利用できるコストパフィーマンスに優れた良書です。
あとは公式サイト(とgoogle検索と試行錯誤)で大丈夫です。
参考サイト







 
 
紹介頂いている本が見あたらないのですが,もしよろしければ教えて頂けないでしょうか?
返信削除