iOS / Swift中的OpenCV入门
对于不认识的人,OpenCV是计算机视觉开放源代码库。 它是用C ++编写的,这意味着您几乎可以在任何地方使用它。 从桌面应用程序到移动应用程序。 简而言之,OpenCV是:
OpenCV(开源计算机视觉库)是一个开源计算机视觉和机器学习软件库。 OpenCV的构建旨在为计算机视觉应用程序提供通用的基础结构,并加速在商业产品中使用机器感知。 作为BSD许可的产品,OpenCV使企业可以轻松地使用和修改代码。
尽管创建新项目并添加pod或框架不是通常的任意任务,但考虑到它的好处,这是一个相当简单的过程。
首先,您可以克隆包含我们将在此处执行的操作的存储库。 在这个项目中,我们将从手机的摄像头获取视频流,并对其应用一些简单的色彩效果,仅用于演示目的。 因此,您需要将必需的权限添加到您的info.plist
文件(即NSCameraUsageDescription
。
我们将添加OpenCV框架并将其与Swift一起使用。 首先创建一个项目(du!)。 然后初始化pods:
$ cd project_root_directory
$ pod init
然后将框架添加到您的Podfile
:
pod'OpenCV','〜> 3.1.0.1'
不要忘记打开由CocoaPods创建的工作区,而不是打开您创建的项目。
OpenCV对称为Mat
的n维密集数组数据类型(而不是UIImages
。 因此,我们需要一种在两者之间进行转换的方法。 为此,我们UIImage
添加扩展
不要错过.mm
扩展名。 它表明它是一个Objective-C ++文件,因此XCode以此进行编译。 否则它将无法正常工作。
接下来,我们将创建一个类,用于从相机获取图像流以进行处理:
上面的类初始化相机,并处理每一帧。 它没有做任何花哨或复杂的事情,但对于初学者来说,这很好。
好了,图像已处理。 现在怎么办? 现在,我们必须在视图控制器中获取图像,或者将其实际使用或呈现。 为此,我们定义了一个委托(在OpenCVCam.mm
):
到目前为止并不难,不是吗?
好的,我们差不多完成了。 不过,有一个很小的问题。 我们将在Swift中使用此类。 因此,显然我们必须将其添加到桥接头中。 好吧,不完全是。 如果我们直接将其添加到桥接头文件中,则将其编译为Objective-C,尽管它是一个Objective-C ++文件( .mm
),但仍无法正常工作。 相信我,去过那里,做到了! 因此,现在为我们的OpenCVCam
类创建一个包装器类:
最后,在桥接头中添加一个条目,以将这些类公开给Swift:
#import“ OpenCVWrapper.h”
Tadaaaaaa! 我们在这里完成。 现在该回到甜美的Swift了。 您现在要做的就是实例化OpenCVWrapper
实例并使用提供的方法。 这是我在文章开头提到的存储库中的示例用法:
这很简单,需要做什么。 只要注意imageProcessed
在后台线程上执行即可。 因此,如果您要更新UI,请不要忘记在主线程上运行任何必要的代码。