ios+opencv调用摄像头

ios opencv


目标实现opencv调用ios手机摄像头

效果:

没有物体识别和按钮部分,如果想学进阶的,点《ios目标检测实战》博文

ios+opencv调用摄像头_第1张图片

简单准备工作

下载需要的opencv ios framework。https://github.com/opencv/opencv/releases

新建一个objective-C项目。

把framework拖入项目:

一定要点Copy items if needed这一项
而Create groups和Create folder references都可以
ios+opencv调用摄像头_第2张图片

因为opencv是用c++写的,我们把我们需要写Opencv代码的控制器的Type改为C++类型。

ios+opencv调用摄像头_第3张图片

添加实时视频处理需要的库:

ios+opencv调用摄像头_第4张图片

添加这些库:

ios+opencv调用摄像头_第5张图片

由于我们要调用摄像头,所以我们需要申请摄像头权限:

找到Info.plist文件,右键OpenAs-SourceCode:

添加:

    <key>NSCameraUsageDescription</key>
    <string>请求访问相机</string>

搭建界面

随便搞一个ImageView来显示摄像头图片:

ios+opencv调用摄像头_第6张图片

键入代码

写代码要注意:

  • #import 要放在#import "ViewController.h"之前!

  • 全部OpenCV代码都写在一个文件中,网上有些代码将某些声明其写在.h文件,但.h无法引用.hpp导致出错。

主要.m代码大致如下:


#import <opencv2/opencv.hpp>
#import <opencv2/videoio/cap_ios.h>
#import "ViewController.h"

using namespace cv;
using namespace std;

@interface ViewController ()<CvVideoCameraDelegate>
{
    Mat cvImage;
}
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property(nonatomic,strong)CvVideoCamera * videoCamera;
@end


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.videoCamera = [[CvVideoCamera alloc]initWithParentView:self.imageView];
    self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack;
    
    self.videoCamera.defaultAVCaptureSessionPreset =AVCaptureSessionPreset640x480;
    
    self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
    self.videoCamera.defaultFPS = 30;
    self.videoCamera.grayscaleMode = false;
    
    self.videoCamera.delegate = self;
    
    [self.videoCamera start];
}


//处理主程序
- (void)processImage:(Mat&)image{
//    cvtColor(image, image, cv::COLOR_RGBA2RGB);
}



- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Opencv调用相机

我们最后还需要把代码中的ImageView与我们storyboard中的ImageView连接

ios+opencv调用摄像头_第7张图片

最后我们就可以调试了。

我们的主要代码在:

//处理主程序
- (void)processImage:(Mat&)image{
//    cvtColor(image, image, cv::COLOR_RGBA2RGB);
}

你可能感兴趣的:(---OD)