【Swift】OpenCVを使ってみる 3 〜カラー画像をグレースケールに変換〜
この記事は、
【Swift】OpenCVを使ってみる 1 〜導入編〜 - 茶漬けの技術メモ
【Swift】OpenCVを使ってみる 2 〜バージョンを表示〜 - 茶漬けの技術メモ
これらの続きとなっております。
それでは、今回は OpenCV を使ってカラー画像をグレースケールに変換していこうと思います。
storyboard に imageView, button をそれぞれ追加し、ViewController.swift にも追加し、
実際にコードを書いていこうと思います。
グレースケールに変換
OpenCVWrapper.mm
#import "OpenCVWrapper.h" #import <opencv2/opencv.hpp> #import <opencv2/highgui/ios.h> @implementation OpenCVWrapper +(NSString *) openCVVersionString { return [NSString stringWithFormat: @"openCV Version %s", CV_VERSION]; } +(UIImage * ) makeGrayFromImage:(UIImage *)image { // transform UIImagge to cv::Mat cv::Mat imageMat; UIImageToMat(image, imageMat); // if the image already grayscale, return it if(imageMat.channels() == 1)return image; // transform the cv::Mat color image to gray cv::Mat grayMat; cv::cvtColor (imageMat, grayMat, CV_BGR2GRAY); return MatToUIImage(grayMat); } @end
import <opencv2/highgui/ios.h>でグレースケールにするためのライブラリを新たにインポートします。
UIImage型のままでは、変換できないので、UIImageToMat()メソッドで cv::mat型に変換します。
(cv::Mat は、画像のビットマップデータへのポインタと、幅,高さ,ビット深度などの様々なプロパティを保持するクラスです。)
cv::cvtColor ()で変換したら、MatToUIImage()で UIImage型にして返します。
OpenCVWrapper.h
#import <UIKit/UIKit.h> @interface OpenCVWrapper : NSObject // funciton to get opencv version +(NSString * ) openCVVersionString; // function to convert image to grayscale +(UIImage * ) makeGrayFromImage:(UIImage * ) image;
ViewController.swift
import UIKit class ViewController: UIViewController { @IBOutlet weak var openCVVersionLabel: UILabel! @IBOutlet weak var birdImageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. openCVVersionLabel.text = OpenCVWrapper.openCVVersionString() } @IBAction func toGrayScaleButtonTouched(_ sender: UIButton) { birdImageView.image = OpenCVWrapper.makeGray(from: birdImageView.image) } }
これで、アプリを実行し、ボタンをタップすると。
これが、
これ、
カラー画像がグレースケールになりましたね。
次回は、テンプレートマッチングをしてみようと思います!!
続きはこちら