[iOS]iOS结合OpenCV做视频流处理或人脸识别

来源:互联网 发布:删除表某一行的sql语句 编辑:程序博客网 时间:2024/06/01 13:45

下面是做好的demo的样子。



然后我来讲一下怎么实现的。


首先去

http://OpenCV.org/downloads.html

下载OpenCV for iOS

我下载的是3.1版本。链接点进去没反应的自行翻墙一下。


然后将里面的framework直接拖入到iOS工程中。

界面什么的随便搭一下。

头文件引入


[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #import <opencv2/opencv.hpp>  
  2. #import <opencv2/videoio/cap_ios.h>  

还要在Build Phases中加入下面这些framework

  • opencv2

  • Accelerate

  • AssetsLibrary

  • AVFoundation

  • CoreGraphics

  • CoreImage

  • CoreMedia

  • CoreVideo

  • QuartzCore

第二个头文件和官方说的不一样,注意一下,官方的比较老了,是错误的。


然后两个变量

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. @property (weak, nonatomic) IBOutlet UIImageView *imageView;  
  2. @property (strong, nonatomic) CvVideoCamera* videoCamera;  

然后在viewdidload里面加入这些代码:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. self.imageView.layer.borderColor = [UIColor blackColor].CGColor;  
  2. self.imageView.layer.borderWidth = 1;  
  3.   
  4.   
  5. self.videoCamera = [[CvVideoCamera alloc] initWithParentView:self.imageView];  
  6. self.videoCamera.delegate = self;//设置代理  
  7. self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack;//用背面摄像头  
  8. self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288; //截取图片大小  
  9. self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;//竖屏  
  10. self.videoCamera.defaultFPS = 30;  
  11. self.videoCamera.grayscaleMode = NO;  


注意使用协议

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. @interface ViewController ()<CvVideoCameraDelegate>  



下面实现代理方法


[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. - (void)processImage:(cv::Mat &)image{  
  2.         Mat gray;  
  3.         cvtColor(image, gray, CV_RGB2GRAY);  
  4.         GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2);  
  5.         Mat edges;  
  6.         Canny(gray,edges,0,50);  
  7.         image.setTo(Scalar::all(255));  
  8.         image.setTo(Scalar(0,128,255,255),edges);  
  9. }  


里面的代码是我自己写的,你们想怎么修改都可以,反正是对图片进行处理,包括人脸识别都可以在这个函数里面完成。


另外,如果你和我一样升级到了iOS10,xcode8的话,在info.plist里面加上下面这样一段代码,先请求摄像头权限,不然会报错。


参考:

http://docs.opencv.org/2.4/doc/tutorials/ios/video_processing/video_processing.html#opencviosvideoprocessing

0 0
原创粉丝点击