標籤:ios opencv
本文的內容參考Instant OpenCV for iOS結合最新的開發平台完成。
本系列文章採用的的開發環境為:
1)Xcode 6
2)OpenCV for iOS 3.0.0 alpha
接下來Step by Step 說明如何在最新的平台下使用OpenCV,以將一個彩色圖片轉換為邊緣圖為例
Step 1:建立一個新的項目
Step 2:在Building phase裡面添加opencv2.framework
Step 3:由於openCV採用C++,因此,要在項目中運行c++代碼,需要將檔案名稱尾碼由.m改成.mm,如所示
Step 4:在ViewController.mm中import OpenCV的檔案
#import <opencv2/opencv.hpp>
#import <opencv2/imgproc/types_c.h>
#import <opencv2/imgcodecs/ios.h>
由於opencv.hpp並沒有包含所以opencv2的檔案,所以有一些需要分別import。
Step 5:輸入如下代碼:
@interface ViewController (){ cv::Mat cvImage;}@property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; CGRect rect = [UIScreen mainScreen].bounds; self.imageView.frame = rect; UIImage *image = [UIImage imageNamed:@"road.JPG"]; // Convert UIImage * to cv::Mat UIImageToMat(image, cvImage); if (!cvImage.empty()) { cv::Mat gray; // Convert the image to grayscale; cv::cvtColor(cvImage, gray, CV_RGBA2GRAY); // Apply Gaussian filter to remove small edges cv::GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2); // Calculate edges with Canny cv::Mat edges; cv::Canny(gray, edges, 0, 60); // Fill image with white color cvImage.setTo(cv::Scalar::all(255)); // Change color on edges cvImage.setTo(cv::Scalar(0,128,255,255),edges); // Convert cv::Mat to UIImage* and show the resulting image self.imageView.image = MatToUIImage(cvImage); } }
中間的過程先不考慮,關鍵點在使用了兩個函數實現iOS下的UIImage和openCV下的cv::Mat格式的轉換,從而實現了iOS與OpenCV的有效串連。
測試效果如下:
從上面可以看出,我們可以非常非常簡單地在iOS下使用OpenCV。接下來就是理解並使用OpenCV的各個功能演算法。
OpenCV For iOS 1: 串連OpenCV 3.0