如何从零开始搭建openCV IOS 工程
来源:互联网 发布:查看电脑的mac地址 编辑:程序博客网 时间:2024/06/08 05:44
第一步:首先去官网下载ios framwork ,人家编辑好的包,直接用很方便,链接:http://opencv.org/downloads.html
注意:opencv 3.0版本是beta版本,不稳定还缺少很多必要的库,请下载2.0以后,3.0以前版本,我下载的是2.4.13,16年5月19版本
第二步:下载的库直接可以拖到工程里,并且要添加以下framework:
添加以后这时候你build一下如果发现编译不过,出现了一个很蛋疼的错误缺少一个libjpg库,不要惊慌,请按照以下步骤;
http://sourceforge.net/projects/libjpeg-turbo/files/1.4.0/ 下载 libjpeg-turbo-1.4.0.dmg
安装这个库,然后你会在路径/opt/libjpeg-turbo/lib找到它libjpeg.a
打开终端输入 lipo -info /opt/libjpeg-turbo/lib/libjpeg.a 看是不是armv7 x86-64都全,然后把这个.a拷贝到你的工程目录下
然后把库拖进你的工程里 ,然后编译,就没有link错误了。
第三步 :写个测试程序,你可能需要把Mat类型转UIImage
//// openUtil.h// targetRecognition//// Created by x32 on 16/5/29.// Copyright © 2016年 x32. All rights reserved.//#import <Foundation/Foundation.h>@interface openUtil : NSObject+(cv::Mat)cvMatFromUIImage:(UIImage *)image;+(UIImage *)UIImageFromCVMat:(cv::Mat)cvMat;@end
//// openUtil.m// targetRecognition//// Created by x32 on 16/5/29.// Copyright © 2016年 x32. All rights reserved.//#import "openUtil.h"@implementation openUtil+ (cv::Mat)cvMatFromUIImage:(UIImage *)image{ CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage); CGFloat cols = image.size.width; CGFloat rows = image.size.height; cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels (color channels + alpha) CGContextRef contextRef = CGBitmapContextCreate(cvMat.data, // Pointer to data cols, // Width of bitmap rows, // Height of bitmap 8, // Bits per component cvMat.step[0], // Bytes per row colorSpace, // Colorspace kCGImageAlphaNoneSkipLast | kCGBitmapByteOrderDefault); // Bitmap info flags CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage); CGContextRelease(contextRef); return cvMat;}+(UIImage *)UIImageFromCVMat:(cv::Mat)cvMat{ NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize()*cvMat.total()]; CGColorSpaceRef colorSpace;// CGBitmapInfo bitmapInfo; if (cvMat.elemSize() == 1) { colorSpace = CGColorSpaceCreateDeviceGray(); } else { colorSpace = CGColorSpaceCreateDeviceRGB(); } CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data); // Creating CGImage from cv::Mat CGImageRef imageRef = CGImageCreate(cvMat.cols, //width cvMat.rows, //height 8, //bits per component 8 * cvMat.elemSize(), //bits per pixel cvMat.step[0], //bytesPerRow colorSpace, //colorspace kCGImageAlphaNone|kCGBitmapByteOrderDefault,// bitmap info provider, //CGDataProviderRef NULL, //decode false, //should interpolate kCGRenderingIntentDefault //intent ); // Getting UIImage from CGImage UIImage *finalImage = [UIImage imageWithCGImage:imageRef]; CGImageRelease(imageRef); CGDataProviderRelease(provider); CGColorSpaceRelease(colorSpace); return finalImage;}@end
写个viewcontroller 里面显示一个UIImageView 引用一堆头文件 找张图片用以下程序测试一下
#import <opencv2/opencv.hpp>#import <opencv2/imgproc/types_c.h>#import <opencv2/core.hpp>#import <opencv2/features2d.hpp>#import <opencv2/calib3d.hpp>#import <opencv2/objdetect.hpp>#import <opencv2/nonfree/nonfree.hpp>#import <opencv2/highgui.hpp>#import <opencv2/imgproc.hpp>#import <opencv2/objdetect/objdetect.hpp>@property (weak, nonatomic) UIImageView *imgView;-(void)corrosionPic{ UIImage* image=[UIImage imageNamed:@"1.jpg"]; cv::Mat srcImage = [openUtil cvMatFromUIImage:image]; cv::Mat element = getStructuringElement(cv::MORPH_RECT, cv::Size(15, 15)); cv::Mat dstImage; cv::erode(srcImage, dstImage, element); UIImage *dstImg = [openUtil UIImageFromCVMat:dstImage]; self.imgView.image =dstImg; self.view.backgroundColor = [UIColor blackColor]; //cv::Mat srcImage1 = cv::imread( "1.jpg", 1 );}
效果如果是这样的
原图: 效果图:
那证明你成功了。
1 0
- 如何从零开始搭建openCV IOS 工程
- Myeclipse从零开始搭建Maven工程
- OpenCV Stitching 工程搭建
- 从零开始搭建iOS项目框架
- 【TomoEngine】 第三讲 从零开始搭建TomoApp工程
- win64从零开始搭建eclipse maven工程
- IDEA下从零开始搭建SpringBoot工程
- IDEA下从零开始搭建SpringBoot工程
- IDEA下从零开始搭建SpringBoot工程
- IDEA下从零开始搭建SpringBoot工程
- 如何从零开始搭建一个网站
- 从零开始建立基于Beeframework的iOS工程
- 如何搭建sshpermissions工程
- openCV IOS 工程 识别数字
- 如何从零开始搭建高性能直播平台?
- 如何从零开始搭建高性能直播平台?
- 从零开始学习HDFS--搭建HDFS的eclipse工程
- 自动化测试基础篇—从零开始搭建测试工程
- Android-银联支付开发
- LeetCode-258.Add Digits
- Quartz与Spring强强联手,定时任务实现更容易
- mongoose的基本操作(二)
- 类型限定词
- 如何从零开始搭建openCV IOS 工程
- 关于回调函数的理解
- 表字段名和实体类属性名不一致的处理
- ListView的position的保持
- windows下安装oracle11g
- Tomcat探秘(5):tomcat关闭过程详述
- 5.乐学成语-----------显示动物类成语列表
- Windows 7下硬盘安装Ubuntu 13.04图文教程
- JS多物体运动