OpenCV入门

OpenCV是一个开源跨平台的的计算机视觉和机器学习库,可以用来做图片视频的处理、图形识别、机器学习等应用。本文将介绍OpenCV iOS开发中的Hello World起步。

OpenCV 1.x

OpenCV 最初基于C语言开发,API也都是基于C的,面临内存管理、指针等C语言固有的麻烦。

2.x和3.x:

尽管3相对与2有一些功能上的增加,但是3和2最大的区别还是在速度上。 

最关键的不同在于OpenCV 3.x的API。几乎所有的OpenCV 3.X 方法都采用OpenCL加速了。所以所有的能够在GPU上运行的方法在性能上都会有10% - 230%的提升。你的代码所需要做的修改只是用UMat替换Mat。如果你想要在OpenCV 2.X 里面提升性能,你就要分别的触发 cv::ocl::* or cv::gpu::* 这些方法才行。

安装

OpenCV安装的方式有三种:

下载源代码编译

使用CocoaPods安装

使用官方的framework

第一种方式太麻烦,而且我也不熟悉,想要自己编译的可以去github下载编译。

第二种方式很简单,再podfile中加入pod 'OpenCV-iOS', '~> 3.1',然后运行pod install就行,但是问题Cocoapods上面OpenCV的版本只有3.x的,没有我想要的2.x的,而且我尝试安装了几次,都因为坑爹的网络以失败告终。

第三种方式就是去官网下载,我下载的最新的2.4.13,后续的例子都是使用此版本进行开发,不过使用的时候还是有不少的坑,后面会提到。

依赖:

libc++.tbd

AVFoundation.framework

CoreImage.framework

CoreGraphics.framework

QuartzCore.framework

Accelerate.framework

如果要使用摄像头做视频处理,还需要添加以下两个依赖库:

CoreVideo.framework

CoreMedia.framework

AssetsLibrary.framework

如果遇到以下错误:"_jpeg_free_large", referencedfrom:

是缺少了libjpeg.a依赖库,你可以在网上搜索这个a文件,下载后使用lipo -info libjpeg.a查看是否包含armv6 armv7 armv7s arm64支持。当然也可以直接下载libjpeg-turbo,安装后直接从此路径/opt/libjpeg-turbo/lib/libjpeg.a复制加入到项目中。

代码尝试:

#import

#import

@interface ViewController ()

{

    UIImageView*cameraView;

    CvVideoCamera*videoCamera;

}

@end

- (void)viewDidLoad {

    [super viewDidLoad];

    cameraView = [[UIImageView alloc] initWithFrame:self.view.frame];

    [self.view addSubview:cameraView];

    videoCamera = [[CvVideoCamera alloc] initWithParentView:cameraView];

    videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront;

    videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset640x480;

    videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;

    videoCamera.defaultFPS = 30;

    videoCamera.grayscaleMode = NO;

    videoCamera.delegate = self;

}

-(void)viewDidAppear:(BOOL)animated {

    [superviewDidAppear:animated];

    [videoCamera start];

}

- (void)viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];

    [videoCamera stop];

}

- (void)processImage:(cv::Mat&)image {

    //在这儿我们将要添加图形处理的代码

    cv::Matimage_copy;

    //首先将图片由RGBA转成GRAY

    cv::cvtColor(image, image_copy,cv::COLOR_BGR2GRAY);

    //反转图片

    cv::bitwise_not(image_copy, image_copy);

    //将处理后的图片赋值给image,用来显示

    cv::cvtColor(image_copy, image,cv::COLOR_GRAY2BGR);

}

你可能感兴趣的:(OpenCV入门)