iOS_OpenCV入门

iOS高级 专栏收录该内容
119 篇文章 0 订阅

原文出处:http://blog.csdn.net/songrotek/article/details/40781105



本文的内容参考《Instant OpenCV for iOS结合最新的开发平台完成。


本系列文章采用的的开发环境为:

1)Xcode 6

2)OpenCV for iOS 3.0.0 alpha


接下来Step by Step 说明如何在最新的平台下使用OpenCV,以将一个彩色图片转换为边缘图为例


Step 1:创建一个新的项目

Step 2:在Building phase里面添加opencv2.framework


Step 3:由于openCV采用C++,因此,要在项目中运行c++代码,需要将文件名后缀由.m改成.mm,如上图所示

Step 4:在ViewController.mm中import OpenCV的文件

#import <opencv2/opencv.hpp>

#import <opencv2/imgproc/types_c.h>

#import <opencv2/imgcodecs/ios.h>

由于opencv.hpp并没有包含所以opencv2的文件,所以有一些需要分别import。

Step 5:输入如下代码:

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. @interface ViewController ()  
  2. {  
  3.     cv::Mat cvImage;  
  4. }  
  5. @property (weak, nonatomic) IBOutlet UIImageView *imageView;  
  6. @end  
  7.   
  8. @implementation ViewController  
  9.   
  10. - (void)viewDidLoad {  
  11.     [super viewDidLoad];  
  12.     CGRect rect = [UIScreen mainScreen].bounds;  
  13.     self.imageView.frame = rect;  
  14.       
  15.     UIImage *image = [UIImage imageNamed:@"road.JPG"];  
  16.     // Convert UIImage * to cv::Mat  
  17.     UIImageToMat(image, cvImage);  
  18.     if (!cvImage.empty()) {  
  19.         cv::Mat gray;  
  20.         // Convert the image to grayscale;  
  21.         cv::cvtColor(cvImage, gray, CV_RGBA2GRAY);  
  22.         // Apply Gaussian filter to remove small edges  
  23.         cv::GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2);  
  24.         // Calculate edges with Canny  
  25.         cv::Mat edges;  
  26.         cv::Canny(gray, edges, 060);  
  27.         // Fill image with white color  
  28.         cvImage.setTo(cv::Scalar::all(255));  
  29.         // Change color on edges  
  30.         cvImage.setTo(cv::Scalar(0,128,255,255),edges);  
  31.         // Convert cv::Mat to UIImage* and show the resulting image  
  32.         self.imageView.image = MatToUIImage(cvImage);  
  33.     }  
  34.       
  35.       
  36. }  

中间的过程先不考虑,关键点在使用了两个函数实现iOS下的UIImage和openCV下的cv::Mat格式的转换,从而实现了iOS与OpenCV的有效连接。

测试效果如下:


从上面可以看出,我们可以非常非常简单地在iOS下使用OpenCV。接下来就是理解并使用OpenCV的各个功能算法





在上一篇文章中,我们实现了OpenCV的连接,在本文中,我们要使用iOS自带的摄像头来获取视频,并且对视频进行边缘检测。


不废话,直接上解决之道:使用openCV封装好的CvVideoCamera来实现


Step 1:添加import

#import <opencv2/videoio/cap_ios.h>


Step 2:导入一下有用的framework


Step 3:

添加protocol <CvVideoCameraDelegate>

这个delegate可以用来出来获取的视频图像

Step 4:创建一个CvVideoCamera的实例

@property (nonatomic,strong) CvVideoCamera *videoCamera;


Step 5:将videoCamera对象与imageView连接:

 self.videoCamera = [[CvVideoCamera alloc] initWithParentView:self.imageView];

    self.videoCamera.delegate = self;

    self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack;

    self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset640x480;

    self.videoCamera.defaultFPS = 30;

只要简单的设置,现在videoCamera已经就绪了,只需要以下命令:

[self.videoCamera start];

[self.videoCamera stop];

进行控制


Step 6:对获取的实时图像进行处理

利用protocol的method:

- (void)processImage:(cv::Mat &)image

{

        cv::Mat gray;

        // Convert the image to grayscale;

        cv::cvtColor(image, gray, CV_RGBA2GRAY);

        // Apply Gaussian filter to remove small edges

        cv::GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2);

        // Calculate edges with Canny

        cv::Mat edges;

        cv::Canny(gray, edges, 0, edgeValue);

        // Fill image with white color

        image.setTo(cv::Scalar::all(255));

        // Change color on edges

        image.setTo(cv::Scalar(0,128,255,255),edges);

        // Convert cv::Mat to UIImage* and show the resulting image

        self.imageView.image = MatToUIImage(image);

    


}



OK啦,这样我们就可以对实时的视频做边缘检测了:



  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

pre_eminent

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值