Bbf79988fbd1378e7152dbd5e801eb51
Learning OpenCV with iOS:Hello OpenCV

一、概念介绍

图像处理、计算机视觉

图像处理,用计算机对图像进行分析,以达到所需结果的技术。又称影像处理。图像处理一般指数字图像处理。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。

计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统。因为感知可以看作是从感官信号中提 取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。

图像处理与计算机视觉区别:
图像处理侧重于对图像的“处理”(如:增强,还原,去燥,分割等)。
计算机视觉则重在使用计算机来模拟人的视觉,模拟才是计算机视觉的目的。

OpenCV

OpenCV(Open Source Computer Vision Library)于1999年由Intel建立,如今由Willow Garage提供支持。
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在LinuxWindowsMac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV覆盖了计算机视觉的许多领域,如产品检测、信息安全、立体视觉和机器人、医学成像等。因为计算机视觉和机器学习关系密切,所以OpenCV还提供了MLL(Machine Learning Library)机器学习库。

常用链接:
OpenCV官方主页
OpenCV github主页
OpenCV iOS tutorials

二、环境搭建

“工欲善其事必先利其器”,接下来我们先搭建一下开发环境,借此了解下OpenCV的基本架构。

1.创建项目

创建项目

创建项目

注:这里以Objective-C作为语言是因为OpenCV接口为C++,使用Objective-C较好与其交互。

2.加入opencv2.framework

前往https://opencv.org/releases.html下载iOS pack。
iOS pack

iOS pack

将opencv2.framework加入项目
加入项目

加入项目

将OpenCV所需的依赖库添加到项目中

  • CoreGraphics.framework
  • Foundation.framework
  • UIKit.framework

如果要使用摄像头做视频处理,还需要添加以下依赖库:

  • CoreVideo.framework
  • CoreMedia.framework
  • AssetsLibrary.framework

framework

framework

3.Say Hello

新建OpenCV.h & OpenCV.mm,并添加以下代码

  • 注:因为OpenCV是C++写的,所以引入项目中的文件需要使用Object-C++的兼容方式来写,具体的做法就是将需要导入OpenCV头文件的m文件改成mm文件
//
//  OpenCV.h
//  LearningOpenCV
//
//  Created by CatchZeng on 2018/6/12.
//  Copyright © 2018年 catch. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface OpenCV : NSObject

+ (UIImage *)gray:(UIImage *)image;

@end

```
//
// OpenCV.m
// LearningOpenCV
//
// Created by CatchZeng on 2018/6/12.
// Copyright © 2018年 catch. All rights reserved.
//

//!!!opencv的头文件引入必须在其他头文件之前

import

import

import

import

import "OpenCV.h"

using namespace cv;

@interface OpenCV() {
}

@end

@implementation OpenCV

  • (UIImage *)gray:(UIImage *)image {
    Mat mat;
    UIImageToMat(image, mat);

    Mat grayMat;
    cvtColor(mat, grayMat, CV_BGR2GRAY);

    UIImage* result = MatToUIImage(grayMat);
    return result;
    }

top Created with Sketch.