简介:参考资料
OpenCV(Open Source Computer Vision Library:openCV官网)是一个开源的基于BSD许可的库,它包括数百种计算机视觉算法。文档OpenCV 2.x API描述的是C++ API,相对还有一个基于C语言的OpenCV 1.x API,后者的描述在文档opencv1.x.pdf中。
OpenCV具有模块化结构,这就意味着开发包里面包含多个共享库或者静态库。下面是可使用的模块:
- 核心功能(Core functionality) - 一个紧凑的模块,定义了基本的数据结构,包括密集的多维Mat数组和被其他模块使用的基本功能。
- 图像处理(Image processing) - 一个图像处理模块,它包括线性和非线性图像滤波,几何图形转化(重置大小,放射和透视变形,通用基本表格重置映射),色彩空间转换,直方图等。
- 影像分析(video) - 一个影像分析模块,它包括动作判断,背景弱化和目标跟踪算法。
- 3D校准(calib3d) - 基于多视图的几何算法,平面和立体摄像机校准,对象姿势判断,立体匹配算法,和3D元素的重建。
- 平面特征(features2d) - 突出的特征判断,特征描述和对特征描述的对比。
- 对象侦查(objdetect) - 目标和预定义类别实例化的侦查(例如:脸、眼睛、杯子、人、汽车等等)。
- highgui - 一个容易使用的用户功能界面。
- 视频输入输出(videoio) - 一个容易使用的视频采集和视频解码器。
- GPU - 来自不同OpenCV模块的GPU加速算法。
- … 一些其他的辅助模块,比如FLANN和谷歌的测试封装,Python绑定和其他。
iOS中的使用
安装的方式蛮多的,鉴于大部分的项目都集成cocoapods,所以选择用cocoapods集成。其他的方式可以学习OpenCV iOS开发(一)——安装这篇博客。
podfile内容然后终端执行pod install
就可以了,需要注意的是.xcodeproj文件要和podfile同目录,不然安装是不成功的。提示下面的错误。
因为电脑没有安装cmake工具,所以又提示了下面的错误。
没有安装cmake参考在Mac下使用OpenCV文章的一、安装OpenCV for MAC发现我电脑没有安装cmake,由于之前安装了Homebrew,所以直接使用命令brew install cmake
安装完成如下图。
于是继续使用pod install
来安装OpenCV-iOS,但是还是报错。内容非常的长,下图是截取其中三个部分组成的。
观察其中error的内容,猜测可能是Xcode的版本问题,因为OpenCV官网的版本已经是3.4.0了,但是cocoapods上面的版本还是3.1.1。尝试使用Xcode8.3.3来打开项目。
更改终端编译的xcode版本退出当前的Xcode之后打开8.3.3然后按照上图去设置,重新执行pod install。
openCV安装成功提示要我们打开workspec文件,而不是xocdeproj。
开始编译项目又遇到了报错,还真是坎坷。
linker command failed with exit code 1 (use -v to see invocation)
也看不到详细的信息。百度参考这篇文章,就解决了问题,-all_load
加不加都可以,但是要删除掉原来的所有内容。
因为原来的项目是Xcode9.2建立的,所以用8.3.3打开的时候storybord会报错,只需要将Main.storyboard、LaunchScreen.storyboard两个用sourceCode打开,删除关于safeArea的那条key-value内容就可以把项目跑起来了。
接着继续编译
c++文件Xcode无法编译需要把viewController.m文件的后缀改为.mm,这样就可以了
更改viewController.mm至此openCV的导入和编译工作就全部完成了,剩下的就是使用了。
参考这篇文章想写一个简单的小Demo,使用一下opencv。但是按照步骤导入头文件,粘贴完代码之后,运行报错如下。
linker问题百度谷歌各种搜索之后,都没有找到答案,有这样说的,其他的答案基本不靠边。
于是乎就怀疑是不是博主漏了什么东西,谷歌到了基于 OpenCV 的人脸识别这篇文章,讲的不错,关键是有Demo,下载之后发现要用8.3.3的Xcode运行,然后运行了下真的可以。
继续搜索了下原来的那个Linker问题,还是没有答案,于是采用了最笨的方法,把项目中所有的参数配置都设置和基于 OpenCV 的人脸识别这个Demo中的一样。一项项的检查,下图中的设置是不一样的。
观察上面的列表中的内容,慢慢的实验哪些需要用到,最终发下,只有一个$(inherited)
只设置这一个编译就成功了。关于这个关键字还特意去查了资料,找到 iOS开发之Xcode 相对路径与绝对路径Xcode中常见的环境变量这两篇文章,讲的意思是target中这样设置会继承project中linker的framework。设置完之后,会发现那里变成了很多项,应该是因为缺少其中某些库,所以到导致编译报错。
然后就发现可以按照第一个Demo中的内容运行,得出了相同的结果。算是实现了这个小Demo。
网友评论