程序员Learning OpenCV with iOSMac

【Learning OpenCV with iOS】(一) He

2018-06-13  本文已影响62人  CatchZeng

原文:http://catchzeng.com/2018/06/12/Learning-OpenCV-with-iOS-(%E4%B8%80)-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

将opencv2.framework加入项目


加入项目

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

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

framework
3.Say Hello

新建OpenCV.h & OpenCV.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 <opencv2/opencv.hpp>
#import <opencv2/imgproc/types_c.h>
#import <opencv2/imgcodecs/ios.h>
#import <opencv2/core/core_c.h>
#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;
}

@end

新建视图控制器SayHelloViewController

class SayHelloViewController: UIViewController {
    
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var grayImageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        grayImageView.image = OpenCV.gray(#imageLiteral(resourceName: "sayHello"))
    }
}

效果

效果

源码地址: https://github.com/CatchZeng/LearningOpenCV

三、OpenCV基础架构

OpenCV包含的内容较多,在学习之前先了解下它的整体模块架构,再选择自己感兴趣的部分重点学习,这样学起来比较得心应手。

鉴于此,下面我们一起来看下OpenCV的整体模块架构。

OpenCV

从上图可看到OpenCV的所有模块:

看到到这里,相信大家已经对OpenCV的模块架构设计有了一定的认识,OpenCV其实就是这么多模块作为代码容器组合起来的一个SDK,了解这些可以更快的学习OpenCV了!

四、小结

本篇从概念到环境搭建再到基本架构的角度介绍了OpenCV,让读者有一个宏观的认识。下一节开始,我将以原理+例子的形式一步步介绍OpenCV的各个模块。

上一篇 下一篇

猜你喜欢

热点阅读