OpenCV3 -跨平台+相机处理

Paste_Image.png

什么是OpenCV

http://baike.baidu.com/link?url=9No0mr9XSltLqwGaQ_h50caVqYbIsUMDfevlxtW9VdwMxHHRTmy5Yvat6Eig3bP8mGu7_taKeRHjsmDTg90RGa
2016年12月23日,发布最新版本:OpenCV 3.2版(合并969个修补程序,关闭478个问题)(OpenCV3)
应用领域除了当前所流行的VR、AR还包括:
-1、人机互动
-2、物体识别
-3、图像分割
-4、人脸识别
-5、动作识别
-6、运动跟踪
-7、机器人
-8、运动分析
-9、机器视觉
-10、结构分析
-11、汽车安全驾驶
下载地址 英文:http://opencv.org/
下载地址 中文:http://www.opencv.org.cn/
目前中文网只支持到OpenCV2.0版本,英文网已经支持到3.2版本

如何使用OpenCV开发包?入门案例(体验案例)

后面在系统学习
案例:相机处理(灰度相机、彩色相机)
实现?

第一步:导入开发包
第二步:实现相机处理(使用开发包)

注意:在使用开发包的时候,需要注意,使用开发包的.m文件必须要支持C++代码(文件后缀名改成.mm),因为OpenCV采用了C++开发

当我们导入框架的时候,会编译报错,如何解决

解决方案

修改文件:exposure_compensate.hpp
原来的代码:
enum { NO, GAIN, GAIN_BLOCKS};
修改后代码:
enum { CNO, GAIN,GAIN_BLOCKS };
修改文件:blenders.hpp
原来的代码:
enum { NO, GAIN, GAIN_BLOCKS};
修改后代码:
enum { CNO, GAIN,GAIN_BLOCKS };

注意:相机的权限

后面会系统学习,体验一下

代码奉上:


#import "ViewController.h"

//使用OpenCV开发框架
//将ViewController.m文件改成ViewController.mm后缀名
//实现第一步:导入开发包
//学习方法?怎么办?
//答案:看文档
#import <opencv2/opencv.hpp>
//第二步:导入视频库同时导入命名空间
#import <opencv2/videoio/cap_ios.h>
using namespace cv;

//CvVideoCameraDelegate:类似于Java中实现接口
@interface ViewController ()<CvVideoCameraDelegate>
//相机显示预览视图
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

//相机(OpenCV视频处理框架类,相机、视频都能够进行处理)
@property (nonatomic, retain) CvVideoCamera* videoCamera;

//是否是灰度相机
@property BOOL isGray;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //第三步:初始化相机
    //initWithParentView:指定相机预览画面
    //self和this一个意思:值得当前意思
    self.videoCamera = [[CvVideoCamera alloc] initWithParentView:_imageView];
    //指定相机摄像头(后置摄像头、前置摄像头)
    //AVCaptureDevicePositionFront:前置摄像头
    //AVCaptureDevicePositionBack:后置摄像头
    self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionFront;
    
    //设置相机方向
    //AVCaptureVideoOrientationPortrait:竖屏显示相机预览画面
//    self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288;
//    self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
//    self.videoCamera.defaultFPS = 30;
//    self.videoCamera.grayscaleMode = NO;
    
    
    //第四步:使用OpenCV需要导入系统库
    
    
    //第五步:处理每一帧数据
    //首先添加帧回调监听(添加delegate)
    //当我们在预览相机的时候,会实时回调预览delegate,然后客户端可以进行帧处理(图像处理)
    self.videoCamera.delegate = self;
    
    
    
}

//彩色相机
- (IBAction)clickColor:(id)sender {
    self.isGray = NO;
    //需要注意:
    //第六步:开始预览
    [self.videoCamera start];
}

//灰度相机
- (IBAction)clickGray:(id)sender {
    self.isGray = YES;
}

//processImage:当我的相机在预览的时候,或者说我们的视频在播放的时候,实时调用该方法
//灰度处理,彩色切换
- (void)processImage:(Mat&)image{
    if (self.isGray){
        // Do some OpenCV stuff with the image
        //将彩色图片转成灰度图片
        //矩阵:是一种数据结构(可以简单的理解为图片数据)
        Mat image_copy;
        //参数一:原始图片(彩色图片)
        //参数二:灰度图片
        //参数三:转换类型(COLOR_BGR2GRAY:转成灰度)
        //将RGB->GRAY
        cvtColor(image, image_copy, COLOR_BGR2GRAY);
        //图片反转
        //bitwise_not作用:会将弧度图片的白色区域变成黑色,黑色区域变成白色
        //    bitwise_not(image_copy, image_copy);
        //Convert BGR to BGRA (three channel to four channel)
        //    Mat bgr;
        //    //我们的图片是3原色(3个通道)转成4个通道
        //     转换过程:Gray->RGB->ARGB
        //    cvtColor(image_copy, bgr, COLOR_GRAY2BGR);
        //原来是:RGB->ARGB
        //    cvtColor(bgr, image, COLOR_BGR2BGRA);
        //从新给我们的原始图片设置数据
        //将我们修改后的帧画面,显示到预览画面
        
        //保持三个管道
        //先转换
        //将GRAY->RGB显示
        cvtColor(image_copy, image, COLOR_GRAY2BGR);
    }
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

Demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值