zoukankan      html  css  js  c++  java
  • OpenCV+iOS开发使用文档

     
    一、      前言
        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宏和UIKitMIN宏有冲突。所以需要在.pch文件中,先定义OpenCV的头文件,否则会有编译错误。将工程的.pch文件内容修改成如下所示:
      
             #ifdef __cplusplus
             #import <opencv2/opencv.hpp>
    #endif
    6.        在使用OpenCV时,主要使用OpenCVC++接口,为了混合使用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.            添加toolbarimageview设计界面如下:
            ii.      设置关联,如下图:
          iii.      调用的过程
    1.   获得加载图片的UIImage,本例如下:
    NSString *fileName = [[NSBundle mainBundle] pathForResource:@"fruits" ofType:@"jpg"];
               imageView.image = [UIImage         imageWithContentsOfFile:fileName];
                        imageView.contentMode = UIViewContentModeScaleAspectFit;
                         loadImage = imageView.image;
    将加载的图片的UIImage给上述中的loadImageloadImage进行转换到Mat
    2.   处理
    直接调用之前写好的ImageProcessing
    imageView.image = [imageProcessing processImage:loadImage  number:numberOfprocess ];
    四、   实验结果
    算法名
    Canny
    Harris
    SIFT
    SURF
    测试时间ms
    9
    40
    176
    143
    实验效果
    五、   参考
  • 相关阅读:
    asp Excel导入数据库
    Excel导出函数
    asp精简checkbox全选代码
    一个操作读写已存在excel 文件的例子
    asp中实现网络打印功能
    asp操作excel 技术总结
    asp初学者常用的代码
    asp连接各种其他数据库 的方法
    asp得到地址栏里"?"以后的字串
    asp判断今天是星期几
  • 原文地址:https://www.cnblogs.com/fengbing/p/3269414.html
Copyright © 2011-2022 走看看