下面是做好的demo的样子。
然后我来讲一下怎么实现的。
首先去
http://OpenCV.org/downloads.html
下载OpenCV for iOS
我下载的是3.1版本。链接点进去没反应的自行翻墙一下。
然后将里面的framework直接拖入到iOS工程中。
界面什么的随便搭一下。
头文件引入
- #import <opencv2/opencv.hpp>
- #import <opencv2/videoio/cap_ios.h>
还要在Build Phases中加入下面这些framework
-
opencv2
-
Accelerate
-
AssetsLibrary
-
AVFoundation
-
CoreGraphics
-
CoreImage
-
CoreMedia
-
CoreVideo
-
QuartzCore
第二个头文件和官方说的不一样,注意一下,官方的比较老了,是错误的。
然后两个变量
- @property (weak, nonatomic) IBOutlet UIImageView *imageView;
- @property (strong, nonatomic) CvVideoCamera* videoCamera;
然后在viewdidload里面加入这些代码:
- self.imageView.layer.borderColor = [UIColor blackColor].CGColor;
- self.imageView.layer.borderWidth = 1;
-
-
- self.videoCamera = [[CvVideoCamera alloc] initWithParentView:self.imageView];
- self.videoCamera.delegate = self;
- self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack;
- self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288;
- self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
- self.videoCamera.defaultFPS = 30;
- self.videoCamera.grayscaleMode = NO;
注意使用协议
- @interface ViewController ()<CvVideoCameraDelegate>
下面实现代理方法
- - (void)processImage:(cv::Mat &)image{
- Mat gray;
- cvtColor(image, gray, CV_RGB2GRAY);
- GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2);
- Mat edges;
- Canny(gray,edges,0,50);
- image.setTo(Scalar::all(255));
- image.setTo(Scalar(0,128,255,255),edges);
- }
里面的代码是我自己写的,你们想怎么修改都可以,反正是对图片进行处理,包括人脸识别都可以在这个函数里面完成。
另外,如果你和我一样升级到了iOS10,xcode8的话,在info.plist里面加上下面这样一段代码,先请求摄像头权限,不然会报错。
参考:
http://docs.opencv.org/2.4/doc/tutorials/ios/video_processing/video_processing.html#opencviosvideoprocessing