本系列文章採用的的開發環境爲:c++
1)Xcode 6算法
2)OpenCV for iOS 3.0.0 安全
-------------------分割線----------------------------app
1.coder都知道開發以前須要作的就是平臺搭建(混蛋不想配置環境~)測試
在OpenCV官網下載OpenCV開發包(推薦最新版,支持64位哦)ui
Step 1:建立一個新的項目atom
Step 2:在Building phase裏面添加opencv2.frameworkspa
簡單的慘絕人寰的環境配置。code
2.終於要開始寫代碼了blog
因爲OpenCV代碼時基於C++編寫的,所以,要在項目中運行c++代碼,須要將文件名後綴由.m改爲.mm,如上圖所示。
(這麼幹或許能行得通,卻不是什麼好主意。正確的方式是給全部你要在 app 中使用到的 OpenCV 功能寫一層 Objective-C++ 封裝。這些 Objective-C++ 封裝把 OpenCV 的 C++ API 轉化爲安全的 Objective-C API,以方便地在全部 Objective-C 類中使用。走封裝的路子,你的工程中就能夠只在這些封裝中調用 C++ 代碼,從而避免掉不少讓人頭痛的問題,好比直接改文件後綴名會由於在錯誤的文件中引用了一個 C++ 頭文件而產生難以追蹤的編譯錯誤。之後有機會咱們來這麼寫吧,今天不想~~)
OpenCV 聲明瞭命名空間 cv
,所以 OpenCV 的類的前面會有個 cv::
前綴,就像 cv::Mat
、 cv::Algorithm
等等。你也能夠在 .mm
文件中使用 using namespace cv
來避免在一堆類名前使用 cv::
前綴。
可是,在某些類名前你必須使用命名空間前綴,好比 cv::Rect
和 cv::Point
,由於它們會跟定義在 MacTypes.h
中的 Rect
和 Point
相沖突。儘管這只是我的偏好問題,我仍是偏向在任何地方都使用 cv::
以保持一致性。
說了那麼多先測試一下吧。
@interface ViewController () { cv::Mat cvImage; } @property (weak, nonatomic) IBOutlet UIImageView *imgView; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; CGRect rect = [UIScreen mainScreen].bounds; self.imgView.frame = rect; UIImage *image = [UIImage imageNamed:@"lenna.png"]; UIImageToMat(image, cvImage); if(!cvImage.empty()){ cv::Mat gray; // 將圖像轉換爲灰度顯示 cv::cvtColor(cvImage,gray,CV_RGB2GRAY); // 應用高斯濾波器去除小的邊緣 cv::GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2); // 計算與畫布邊緣 cv::Mat edges; cv::Canny(gray, edges, 0, 50); // 使用白色填充 cvImage.setTo(cv::Scalar::all(225)); // 修改邊緣顏色 cvImage.setTo(cv::Scalar(0,128,255,255),edges); // 將Mat轉換爲Xcode的UIImageView顯示 self.imgView.image = MatToUIImage(cvImage); } }
因爲只是一個簡單的測試程序。咱們的storyboard也很是的簡單的用UIImageView填充滿屏幕。
看一下結果吧。
從上面能夠看出,咱們能夠很是很是簡單地在iOS下使用OpenCV。接下來就是理解並使用OpenCV的各個功能算法。
那麼咱們爲什麼不趁熱看一下接下的文章呢。