一、      前言
    OpenCV是开源的跨平台的计算机视觉库,实现了图像处理、计算机视觉和机器学习的很多通用算法。
对于移动设备没有快速输入的键盘,大的屏幕,其优势在于图像和声音,因此要发挥好移动设备的性能,必须很好的利用这一特点。
本文档主要说明如何在iOS系统中使用OpenCV。
二、      开发准备
1.        下载OpenCV for iOS
2.        打开XCode,新建一个工程,例如新建一个Single View Application
3.        在项目中添加下载好的OpenCV库,其中一种添加方式,在新建好的项目中,右键Framework,选择Add Files to,在跳出的窗口中找到opencv 2.framework后 点击add。
 
4.        最终效果图如下:
5.        因为OpenCV中的MIN宏和UIKit的MIN宏有冲突。所以需要在.pch文件中,先定义OpenCV的头文件,否则会有编译错误。将工程的.pch文件内容修改成如下所示:
  
         #ifdef __cplusplus
         #import <opencv2/opencv.hpp>
#endif
6.        在使用OpenCV时,主要使用OpenCV的C++接口,为了混合使用C++和Objective-C,需将源文件扩展名为.m的改成.mm。
7.        在iOS中图像的显示主要通过UIImage,在OpenCV中处理通过Mat类型,两者之间要进行转换,显示通过UIImage,处理通过Mat。转换写成一个公共类文件UIImageCVMatConverter.mm,添加到项目中,具体见附件。
8.        在使用到OpenCV的地方跟原C++一样。
三、      测试项目
对基本的图像处理算法进行测试给出原图,测试效果图,处理时间,代码。
1.        建议对图像处理部分单独建一个类,将设计与处理分开。
2.        打开.h头文件,直接引用C++的OpenCV库,添加要实现的方法,具体如下:
3.        在.mm文件中具体实现,实现的部分代码如下:
4.        Objective-C调用,在头文件中添加类似下面的方法,传入参数为待处理图像、处理方法的序号
-(UIImage *)processImage:(UIImage *)inputImage number:(int)useNumber;
具体实现如下:
-(UIImage *)processImage:(UIImage *)inputImage number:(int)useNumber
{
    cv::Mat inputMat = [UIImageCVMatConverter cvMatFromUIImage:inputImage];
    cv::Mat resultMat;
    //这边到时构建一个字典,将序号转成调用名
    switch (useNumber)
    {
        case 0:
            resultMat =[self cannyConversion:inputMat];
            break;
        case 1:
            resultMat =[self equalizeHistConversion:inputMat];
            break;
        case 2:
            resultMat =[self harrisConversion:inputMat];
            break;
        case 3:
            resultMat =[self siftConversion:inputMat];
            break;
        case 4:
            resultMat =[self surfConversion:inputMat];
            break;
           
        default:
            break;
    }
    inputMat.release();
    return [UIImageCVMatConverter UIImageFromCVMat:resultMat];
}
5.        设计界面,调用上述处理函数
                     i.            添加toolbar和imageview设计界面如下:
        ii.      设置关联,如下图:
      iii.      调用的过程
1.   获得加载图片的UIImage,本例如下:
NSString *fileName = [[NSBundle mainBundle] pathForResource:@"fruits" ofType:@"jpg"];
           imageView.image = [UIImage         imageWithContentsOfFile:fileName];
                    imageView.contentMode = UIViewContentModeScaleAspectFit;
                     loadImage = imageView.image;
将加载的图片的UIImage给上述中的loadImage,loadImage进行转换到Mat
2.   处理
直接调用之前写好的ImageProcessing类
imageView.image = [imageProcessing processImage:loadImage  number:numberOfprocess ];
四、   实验结果
算法名
Canny
Harris
SIFT
SURF
测试时间ms
9
40
176
143
实验效果
五、   参考

OpenCV+iOS开发使用文档的更多相关文章

  1. iOS开发-相关文档

    关于调试,查看Xcode Overview文档相关部分:http://developer.apple.com/library/ios/documentation/ToolsLanguages/Conc ...

  2. IOS开发在线文档 记录下

    View Programming Guide for iOS https://developer.apple.com/library/prerelease/ios/documentation/UIKi ...

  3. iOS开发官方文档汇总

    程序员的学习过程是无止境的,程序员学习的途径是多样的.可以从视频教程中领悟,也可以从他人的代码中 理解.但当我们专注于某一个平台在开发的时候,对于某个API使用或者功能实现有疑问,通常简单的测试可以让 ...

  4. Enterprise Solution 2.2 开发帮助文档集合

    首先是一个PPT文档,从宏观层面展示Enterprise Soltion的几个功能特色. Enterprise Solution解决方案安装与配置 将源代码解决方案和演示程序在电脑中进行配置,作为了解 ...

  5. WEB前端开发规范文档(转)

    http://codeguide.bootcss.com/  编写灵活.稳定.高质量的 HTML 和 CSS 代码的规范上面的文档 再结合下面的规范: 无论是从技术角度还是开发视角,对于web前端开发 ...

  6. Android APP开发需求文档范本

    Android  APP开发需求文档范本 软件需求文档格式的标准写法 1.引言 1.1 编写目的 • 阐明开发本软件的目的: 1.2 项目背景 • 标识待开发软件产品的名称.代码: • 列出本项目的任 ...

  7. 网站开发进阶(三十八)Web前端开发规范文档你需要知道的事

    Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...

  8. FlappyBird开发帮助文档

    FlappyBird开发帮助文档 项目需求 完成FlappyBird游戏. 功能说明: 游戏开始后,间歇性的点击鼠标,让小鸟向上飞,不会掉下来,并且要穿过柱子的空隙,不能碰到柱子,碰到就dead了,穿 ...

  9. Web前端开发规范文档你需要知道的事

    Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...

随机推荐

  1. JavaScript中.和[]有什么区别?

    .与[]都可以用于读取或修改对象属性. <script> var myData={ name:"Adam", weather:"sunny", }; ...

  2. Linux 下文本查找技巧你掌握了吗?

    前言 之前介绍过很多linux下查找相关的命令,例如<Linux中的文件查找技巧>,<find命令高级用法>,<如何查看linux中文件打开情况-lsof命令>等等 ...

  3. Kafka详解与总结(二)

    Kafka Stream Kafka Streams是一个客户端库,用于构建任务关键型实时应用程序和微服务,其中输入和输出数据存储在Kafka集群中.Kafka Streams结合了在客户端编写和部署 ...

  4. github fork项目更改后与原作者同步更新

    1.进入你的GitHub发起Pull request 2.选择compare across forks 3.反向操作.base fork改为自己的,head fork改为原作者的 4.点击 creat ...

  5. Android App签名(为apk签名)

    最近有朋友问到 android 签名的问题,所以转一篇给大家分享: 这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1.签名的意义 为了保证每个应用程序开 ...

  6. nginx下如何配置 ssl证书?腾讯云ssl证书为例!

    nginx下如何配置 ssl证书?腾讯云ssl证书为例! 目前为止,https已经成为一种趋势,想要开启https就需要ssl证书. 首先,为域名注册ssl证书. 腾讯云注册地址:https://cl ...

  7. fcc 响应式框架Bootstrap 练习1

    需要通过添加下列代码到你的HTML开头来将Bootstrap添加到任意应用中: <link rel="stylesheet" href="//cdn.bootcss ...

  8. 体验SqlServer Express 2014

    想使用SQLServer Express记录一些数据,但使用起来并不令人愉快.SQLServer Express是一个免费的可用数据库,但似乎设置了一些门槛,多少显得并不真心实意.抛开版本(技术)限制 ...

  9. Django中 基于form的注册,基于ajax的登录

    1 form.py中写register的的form组件 from django import forms class Register(forms.Form): # 注册的form username ...

  10. shouldComponentUpdate不能直接比较object

    凡是参阅过react官方英文文档的童鞋大体上都能知道对于一个组件来说,其state的改变(调用this.setState()方法)以及从父组件接受的props发生变化时,会导致组件重渲染,正所谓&qu ...