本章及以后文章所采用的开发环境: (1)xcode 8.2 (2)opencv for iOS 3.2 ps:低于xcode8.0版本,opencv环境会出现报错[会发生<opencv2/opencv.hpp>头文件找不到]

Opencv的介绍 OpenCV ,是一个开源的跨平台计算机视觉和机器学习库,通俗点的说,就是他给计算机提供了一双眼睛,一双可以从图片中获取信息的眼镜,从而完成人脸识别、去红眼、追踪移动物体等等的图像相关的功能。更多具体的说明可参见 OpenCV 官网->http://opencv.org

Opencv库模块划分
你可以去opencv官网下载最新的支持包 http://opencv.org/downloads.html

这是官方库中重要几个模块 core:简洁的核心模块,定义了基本的数据结构,包括稠密多维数组 Mat 和其他模块需要的基本函数。 imgproc:图像处理模块,包括线性和非线性图像滤波、几何图像转换 (缩放、仿射与透视变换、一般性基于表的重映射)、颜色空间转换、直方图等等。 video:视频分析模块,包括运动估计、背景消除、物体跟踪算法。 calib3d:包括基本的多视角几何算法、单体和立体相机的标定、对象姿态估计、双目立体匹配算法和元素的三维重建。 features2d:包含了显著特征检测算法、描述算子和算子匹配算法。 objdetect:物体检测和一些预定义的物体的检测 (如人脸、眼睛、杯子、人、汽车等)。 ml:多种机器学习算法,如 K 均值、支持向量机和神经网络。 highgui:一个简单易用的接口,提供视频捕捉、图像和视频编码等功能,还有简单的 UI 接口 (iOS 上可用的仅是其一个子集)。 gpu:OpenCV 中不同模块的 GPU 加速算法 (iOS 上不可用)。 ocl:使用 OpenCL 实现的通用算法 (iOS 上不可用)。 一些其它辅助模块,如 Python 绑定和用户贡献的算法。

基础类和操作 OpenCV有几百个类,几个核心类可以参考文档:http://docs.opencv.org/modules/core/doc/core.html

cv::Mat:核心数据结构,可以用来表示N维矩阵,图像是2维矩阵的,cv::Mat是OpenCV中用的最多的。一个cv::Mat实例作用就是图像数据头,包含图像格式信息。图像中任一像素地址都可通过下面的指针运算得到: uchar *pixelPtr = cvMat.data + rowIndex * cvMat.step[0] + colIndex * cvMat.step[1]

每个像素的数据格式可以通过type()方法获得,这些数据格式包括:

常用的每通道8位无符号整数的灰度图(1通道,CV_8UC1) 常用的彩色图(3通道,CV_8UC3) 不常用的CV_16SC3(每像素3通道,每通道使用16位有符号整数) 不常用的CV_64FC4(每像素4通道,每通道使用64位浮点数) cv::Algorithm:很多算法的抽象基类。

关于opencv介绍就到这,本文重头戏在于iOS的使用

iOS 与 opencv 交互 添加到自己的工程中 (1)CocoaPods:pod “OpenCV" (2)下载官方iOS包:http://opencv.org/downloads.html (3)在GitHub下代码自己编译:GitHub地址https://github.com/Itseez/opencv,编译教程http://docs.opencv.org/doc/tutorials/introduction/ios_install/ios_install.html#ios-installation

因为opens库的底层是由C++源码写成,得盈于苹果爸爸,Xcode也是编译C++,使得iOS比安卓更加容易兼容Opencv,但是在使用中也需注意一些配置

配置(一): 添加一个PCH文件,在PCH文件中: #import <Availability.h> #ifdef __cplusplus #import <opencv2/opencv.hpp> #endif #ifdef OBJC #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #endif

配置(二):

这个地方的配置必须这样才能使工程编译通过

配置(三):

PS:OpenCV 是一个 C++ 的 API,因此不能直接在 Swift 和 Objective-C 代码中使用,但能在 Objective-C++ 文件中使用。 Objective-C++ 是 Objective-C 和 C++ 的混合物,让你可以在 Objective-C 类中使用 C++ 对象。clang 编译器会把所有后缀名为.mm 的文件都当做是 Objective-C++。一般来说,它会如你所期望的那样运行,但还是有一些使用 Objective-C++ 的注意事项。内存管理是你最应该格外注意的点,因为 ARC 只对 Objective-C 对象有效。当你使用一个 C++ 对象作为类属性的时候,其唯一有效的属性就是 assign。因此,你的 dealloc 函数应确保 C++ 对象被正确地释放了。 第二重要的点就是,如果你在 Objective-C++ 头文件中引入了 C++ 头文件,当你在工程中使用该 Objective-C++ 文件的时候就泄露了 C++ 的依赖。任何引入你的 Objective-C++ 类的 Objective-C 类也会引入该 C++ 类,因此该 Objective-C 文件也要被声明为 Objective-C++ 的文件。这会像森林大火一样在工程中迅速蔓延。所以,应该把你引入 C++ 文件的地方都用 #ifdef __cplusplus包起来,并且只要可能,就尽量只在 .mm 实现文件中引入 C++ 头文件。

到这里opencv适配Xcode工程就基本适配完了,关于opencv使用将在下一篇文章讲到,近期公司项目安排有点紧,估计下篇得在这周末完成了.

转载于:https://juejin.im/post/5a3ce1f96fb9a044fc44efdd

iOS与Opencv的探秘之Opencv认识,适配Xcode相关推荐

  1. 我为什么要学习openCV,什么是openCV

    OpenCV:Open Source Computer Vision Library  开源计算机视觉库 个人学习openCV两个原因:1.看好计算机视觉技术未来广阔市场前景:2.为产品做升级引入新技 ...

  2. openCV学习系列1:我为什么要学习openCV,什么是openCV

    OpenCV:Open Source Computer Vision Library  开源计算机视觉库 个人学习openCV两个原因:1.看好计算机视觉技术未来广阔市场前景:2.为产品做升级引入新技 ...

  3. 【从零学习OpenCV 4】了解OpenCV的模块架构

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门 ...

  4. 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

    1.下载和安装OpenCV SDK VS2010不用说,肯定都安装了吧.来说说当前最新的OpenCV版本2.4.8(2014年2月24日),2.4.9 (2014年4月)的下载和安装.与其说是安装,不 ...

  5. [OpenCV] -- win7下配置OpenCV的Qt开发环境

    http://blog.csdn.net/qiurisuixiang/article/details/8665278 编译.配置OpenCV的工程相当曲折,编译OpenCV不下5次,一开始还以为是自己 ...

  6. 【转】【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/19809337 作者:毛星云(浅 ...

  7. 【opencv4】opencv视频教程 C++(opencv教程)2、加载imread()(以灰度加载),修改,保存图像

    上一讲:[opencv4]opencv视频教程 C++(opencv教程)1.opencv介绍和环境搭建 下一讲:[opencv4]opencv视频教程 C++(opencv教程)3.矩阵的掩膜操作( ...

  8. 【opencv4】opencv视频教程 C++(opencv教程)1、opencv介绍和环境搭建

    下一讲:[opencv4]opencv视频教程 C++(opencv教程)2.加载,修改,保存图像 [opencv_C++] 入门强推!!![B站最全] 文章目录 opencv介绍和环境搭建 open ...

  9. OpenCV android sdk配置OpenCV android NDK开发实例

    OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...

最新文章

  1. 面试时与人事交谈时间_如何与您的技术负责人交谈并解决通讯故障
  2. TIOBE 9月编程语言排行榜
  3. UA MATH564 概率论 QE练习题2
  4. concurrent: ThreadPoolExecutor 用法
  5. ssh免密登陆失败原因总结(Linux)
  6. redis笔记——redis事务及锁应用
  7. Python多进程中多参数问题
  8. java线程安全例子_Java总结篇系列:Java多线程(三)
  9. centos7环境下MySQL安装教程
  10. opencv-api cvtColor
  11. 【MySQL】语句抓包分析工具MySQL sniffer
  12. Hyper-V 虚拟网络设置
  13. 测试用例设计方法之选择原则
  14. B1105 Spiral Matrix (画图)
  15. DPDK 20.11 meson build
  16. vs项目中的筛选器(filter)
  17. OutLook使用技巧
  18. java毕业设计民航售票管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  19. 迅雷链DAPP插件:链克袋鼠Linker让链克持续爆发
  20. sqlmap总出现missing a mandatory option的解决方法

热门文章

  1. mysql通过拷贝数据文件的方式进行数据库迁移
  2. Leetcode题库 145.二叉树的后序遍历(递归 C实现)
  3. php mysql 链表_php实现数据结构的单向链表
  4. android gis 框架,三、ArcGis For Android:图层(Layers)
  5. Sybase函数大全
  6. SQL中cross join,left join,right join ,full join,inner join 的区别
  7. JavaEE课程目标、个人目标、互联网应用和企业级应用的区别
  8. Activity小技巧
  9. Timus Online Judge:ural:1006. Square Frames
  10. 第一次接触正则表达式/^[A-Za-z_][A-Za-z0-9_]{5,15}$/