本文仿照這篇文章做的Demo
我抽象了一個叫做OpenCVUtil的類,來封裝openCV的c++方法煞额,
OpenCVUtil.h文件如下:
//
// OpenCVUtil.h
// openCV-Practice
//
// Created by Realank on 16/4/29.
// Copyright ? 2016年 realank. All rights reserved.
//
#import <Foundation/Foundation.h>
@class UIImage;
@interface OpenCVUtil : NSObject
+ (UIImage*)convertImage:(UIImage*)image;
@end
因?yàn)閛penCV使用c++編寫膊毁,所以需要混合編程婚温,實(shí)現(xiàn)文件叫做OpenCVUtil.mm
//
// OpenCVUtil.m
// openCV-Practice
//
// Created by Realank on 16/4/29.
// Copyright ? 2016年 realank. All rights reserved.
//
#import "OpenCVUtil.h"
#import <UIKit/UIKit.h>
#import <opencv2/opencv.hpp>
#import <opencv2/imgproc/types_c.h>
#import <opencv2/imgcodecs/ios.h>
@interface OpenCVUtil (){
}
@end
@implementation OpenCVUtil
+ (UIImage*)convertImage:(UIImage*)image {
cv::Mat cvImage;
UIImageToMat(image, cvImage);
if(!cvImage.empty()){
cv::Mat gray;
// 將圖像轉(zhuǎn)換為灰度顯示
cv::cvtColor(cvImage,gray,CV_RGB2GRAY);
// 應(yīng)用高斯濾波器去除小的邊緣
cv::GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2);
// 計(jì)算與畫布邊緣
cv::Mat edges;
cv::Canny(gray, edges, 0, 50);
// 使用白色填充
cvImage.setTo(cv::Scalar::all(225));
// 修改邊緣顏色
cvImage.setTo(cv::Scalar(0,128,255,255),edges);
// 將Mat轉(zhuǎn)換為Xcode的UIImageView顯示
return MatToUIImage(cvImage);
}
return nil;
}
@end
使用起來很簡單:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.imgView.image = [OpenCVUtil convertImage:[UIImage imageNamed:@"img"]];
}
效果圖