基於OpenCV的iOS開發筆記(1)


本系列文章采用的的開發環境為:

1)Xcode 6

2)OpenCV for iOS 3.0.0 

-------------------分割線----------------------------

1.coder都知道開發之前需要做的就是平台搭建(混蛋不想配置環境~)

OpenCV官網下載OpenCV開發包(推薦最新版,支持64位哦)

Step 1:創建一個新的項目

Step 2:在Building phase里面添加opencv2.framework

簡單的慘絕人寰的環境配置。

 

2.終於要開始寫代碼了

由於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的各個功能算法。

那么我們為何不趁熱看一下接下的文章呢。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM