ios
opencv
目标实现opencv调用ios手机摄像头
效果:
没有物体识别和按钮部分,如果想学进阶的,点《ios目标检测实战》博文
简单准备工作
下载需要的opencv ios framework。https://github.com/opencv/opencv/releases
新建一个objective-C项目。
把framework拖入项目:
一定要点Copy items if needed这一项
而Create groups和Create folder references都可以
因为opencv是用c++写的,我们把我们需要写Opencv代码的控制器的Type改为C++类型。
添加实时视频处理需要的库:
添加这些库:
由于我们要调用摄像头,所以我们需要申请摄像头权限:
找到Info.plist文件,右键OpenAs-SourceCode:
添加:
<key>NSCameraUsageDescription</key>
<string>请求访问相机</string>
搭建界面
随便搞一个ImageView来显示摄像头图片:
键入代码
写代码要注意:
-
#import <opencv2/opencv.hpp>要放在#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连接
最后我们就可以调试了。
我们的主要代码在:
//处理主程序
- (void)processImage:(Mat&)image{
// cvtColor(image, image, cv::COLOR_RGBA2RGB);
}