`

在iPhone上使用 OpenCV

 
阅读更多

 

原文:http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en

Posted by Yoshimasa Niwaon 03/14, 2009

 

图片

 

OpenCV是intel开发的计算机视觉库,例如我们可以用它轻易地实现面部识别。本文介绍如何在iOS中使用OpenCV,包括脚本的编译及一个demo示例程序。上面的截图就取自这个demo。

OpenCV最新版本及所支持的iOSSDK

OpenCV 最新版本为2.2.0,它支持iOSSDK 4.3, Xcode 4 (04/17/2011更新)

开始

所有代码和资源都是开放的,你可以从这里下载:

 my githubrepository.

它包括一个已编译好的OpenCV库和头文件。你可以轻易就使用它。如果你安装了git,可以从github克隆整个存储库。否则,可从github下载压缩包并解压缩。

% git clone git://github.com/niw/iphone_opencv_test.git

获得源代码之后,用Xcode打开OpenCVTest项目并编译它。你可以用iPhone或者iPhone模拟器运行这个demo。

编译OpenCV库

 

你可以用gcc编译器直接从源代码编译生成OpenCV的二进制版本。为了节省你的时间,我写了一个脚本。由于iOSSDL不支持向.framework这样的动态链接库,所以我们不得不以“静态库”的方式将OpenCV连接到你的app中。

 

  1. 编译OpenCV需要使用CMake。你可以用Homebrew或者MacPorts来安装CMake,即:

Homebreww

brew install cmake

或者

MacPorts

sudo port install cmake –gui

如果你已经安装了最新的Java update,可能会问让你安装javadeveloper_10.6_10m3261.dmg。这是因为cmake需要用到jni.h,但在后来的Java update中已经把它删除了。在这里 here for Mac OS X10.6 可以下载到它(需要订阅Apple Developer Connection). 同时, 苹果将在MacOSX中抛弃Java going to deprecateJava on MacOS X (10/30/2010更新).

  1. 从 sourceforge获得OpenCV。 我使用的是OpenCV-2.2.0.tar.bz2.
  2. 在demo 项目的根目录解压缩: tar xjvf OpenCV-2.2.0.tar.bz2
  3. 应用 iOS SDK补丁:

cd OpenCV-2.2.0

patch -p1 < ../OpenCV-2.2.0.patch

  1. 接下来为模拟器生成OpenCV静态库。所有的文件放在opencv_simulator目录。运行make命令时,最好在-j选项后面加上你的CPU内核数,这样可以节约一些时间。

 

cd .. # Back to the top of demo project directory.

mkdir build_simulator

cd build_simulator

../opencv_cmake.sh Simulator ../OpenCV-2.2.0

make -j 4

make install

  1. 然后为物理设备生成OpenCV静态库,并放在opencv_device目录下:

cd .. # Back to the top of demo project directory.

mkdir build_device

cd build_device

../opencv_cmake.sh Device ../OpenCV-2.2.0

make -j 4

make install

脚本

opencv_cmake.sh 脚本带有一些参数。使用--help参数可以查看各种参数的用法。UIImage 和 IplImage 类型转换

OpenCV使用IplImage结构,对应于iOS SDK的UIImage对象。这意味着,我们需要在二者间进行转换。幸运的是,我们通过用SDK提供的API来做。

UIImage à IplImage

// NOTE you SHOULD cvReleaseImage() for the return value when end ofthe code.

- (IplImage *)CreateIplImageFromUIImage:(UIImage *)image {

   // Getting CGImage from UIImage

   CGImageRefimageRef = image.CGImage;

   CGColorSpaceRefcolorSpace = CGColorSpaceCreateDeviceRGB();

   // Creatingtemporal IplImage for drawing

   IplImage *iplimage= cvCreateImage(cvSize(image.size.width,image.size.height), IPL_DEPTH_8U,4   );

   // CreatingCGContext for temporal IplImage

   CGContextRefcontextRef = CGBitmapContextCreate(iplimage->imageData, iplimage->width,iplimage->height, iplimage->depth, iplimage->widthStep, colorSpace,kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault);

   // Drawing CGImageto CGContext

  CGContextDrawImage(contextRef, CGRectMake(0, 0, image.size.width,image.size.height), imageRef);

  CGContextRelease(contextRef);

  CGColorSpaceRelease(colorSpace);

   // Creating resultIplImage

   IplImage *ret =cvCreateImage(cvGetSize(iplimage), IPL_DEPTH_8U, 3);

  cvCvtColor(iplimage, ret, CV_RGBA2BGR);

  cvReleaseImage(&iplimage);

    return ret;

}

用完IplImage之后,记住用cvReleseImage来释放它。

 

IplImage àUIImage

 

// NOTE You should convert color mode as RGB before passing to thisfunction

- (UIImage *)UIImageFromIplImage:(IplImage *)image {

   CGColorSpaceRefcolorSpace = CGColorSpaceCreateDeviceRGB();

   // Allocating thebuffer for CGImage

   NSData *data =[NSData dataWithBytes:image->imageData length:image->imageSize];

   CGDataProviderRefprovider =    CGDataProviderCreateWithCFData((CFDataRef)data);

   // CreatingCGImage from chunk of IplImage

   CGImageRefimageRef = CGImageCreate(image->width, image->height,     image->depth,image->depth * image->nChannels, image->widthStep,     colorSpace,kCGImageAlphaNone|kCGBitmapByteOrderDefault, provider, NULL, false,kCGRenderingIntentDefault);

   // Getting UIImagefrom CGImage

   UIImage *ret = [UIImageimageWithCGImage:imageRef];

  CGImageRelease(imageRef);

   CGDataProviderRelease(provider);

  CGColorSpaceRelease(colorSpace);

   return ret;

}

Ok,现在你可以在你的iPhone项目中使用OpenCV了。

在你的项目中使用OpenCV库

示例程序已经为OpenCV库的使用配置过了。如果你想在自己的项目中使用OpenCV,你需要在项目中加入以下配置。在demo程序中,你可以通过Xcode查看这些设置。

  • 把OpenCV库目录中的libopencv_core.a加到项目中(用于模拟器或用于设备)。实际上,在这里Xcode并不关心是用于模拟器还是设备,因为它是通过库搜索路径来决定的。
  • 加入Accelerate.framework框架。
  • 选择有效的target,打开 build settings页。
    • 把-lstdc++ 和 –lz加到Other Linker Flags中
    • 把OpenCV的include目录添加到Header Search Paths(设备和模拟器)
    • 把OpenCV的lib目录添加到Library Search Paths(设备和模拟器)

欢迎关注微信公众号——计算机视觉:

 

分享到:
评论

相关推荐

    IOS源码之【类库】Using OpenCV on iPhone(适用OpenCV 2.1.0_iOS SDK 3.x_4.x)

    5. **实时摄像头输入**:在iPhone上使用OpenCV,开发者可以接入摄像头作为实时图像数据来源,通过捕获每一帧图像进行处理。这通常涉及到AVFoundation框架的使用,以获取视频流并结合OpenCV进行图像处理。 6. **性能...

    niw-iphone_opencv_test-a2e6c08db6c8af0d059f972a29_iphone_iphone

    《OpenCV在iPhone上的应用实例解析》 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它包含了众多图像处理和计算机视觉的算法,广泛应用于图像识别、人脸识别、图像分割、物体检测等...

    xcode中应用opencv开发iphone的应用程序

    在iOS平台上,使用Xcode开发应用程序是常见的做法,而OpenCV是一个强大的计算机视觉库,它在图像处理、模式识别和机器学习等领域有着广泛的应用。本教程将深入探讨如何在Xcode中集成OpenCV来开发针对iPhone的应用...

    OpenCV for Unity 2.5.8

    (实时人脸检测可以在 iPhone 5 上流畅运行) - 提供了 Unity 的 Texture2D 和 OpenCV 的 Mat 相互转换的方法。 - IDisposable 已在许多类中实现。您可以使用 "using"语句管理资源。 - 提供了与其他发布者资源...

    iOS配置OpenCV库

    在iOS平台上配置OpenCV库可能对开发者来说是一个挑战,但一旦成功,它将极大地扩展iPhone应用的计算机视觉功能。OpenCV(开源计算机视觉库)是一个强大的工具,用于图像处理、特征检测、对象识别等任务。以下是你...

    IOS应用源码——OpenCV-iPhone(Xcode project_04.07.2010).zip

    通过研究和实践OpenCV-iPhone项目,开发者不仅可以掌握OpenCV的基本用法,还能深入了解iOS应用开发流程,提升在移动平台上的计算机视觉应用开发能力。这将为开发出更多创新和实用的iOS应用奠定坚实基础。

    最新 OpenCV for Unity 2.5.7 - unity 人脸识别插件

    适用于 Unity 云版本 ... (实时人脸检测可以在 iPhone 5 上流畅运行) - 提供了 Unity 的 Texture2D 和 OpenCV 的 Mat 相互转换的方法。 - IDisposable 已在许多类中实现。您可以使用 "using"语句管理资源。

    OpenCV lib for iOS part1

    在iOS平台上,OpenCV库的使用可以让开发者在iPhone、iPad等设备上实现复杂的图像分析和处理功能,如人脸识别、图像识别、物体追踪等。 针对"OpenCV lib for iOS part1"这个主题,我们首先会关注如何在iOS项目中集成...

    IOS应用源码——niw-iphone_opencv_test-4ab0572.zip

    在iOS上使用OpenCV时,我们需要先通过CocoaPods或Carthage这样的依赖管理工具将其集成到项目中,或者手动添加库文件。 接下来,源码可能包含了以下部分: 1. `ViewController.swift` 或 `ViewController.m`: 这是...

    OpenCV for Unity 2.6.0

    (实时人脸检测可以在 iPhone 5 上流畅运行) - 提供了 Unity 的 Texture2D 和 OpenCV 的 Mat 相互转换的方法。 - IDisposable 已在许多类中实现。您可以使用 "using"语句管理资源。 - 提供了与其他发布者资源...

    OpenCV for Unity 2.3.4

    (real-time face detection works smoothly on iPhone 5) - Provides a method to interconversion of Unity's Texture2D and OpenCV's Mat. - IDisposable is implemented in many classes.You can manage the ...

    IOS应用源码之【类库与框架】-Using OpenCV on iPhone

    本项目标题"IOS应用源码之【类库与框架】-Using OpenCV on iPhone"揭示了我们将深入探讨如何在iOS平台上集成并使用OpenCV进行图像处理和分析。 描述中提到的"适用于 OpenCV 2.1.0_iOS SDK 3.x_4.x"表明这是一个较早...

    OpenCV for Unity 2.3.2

    (real-time face detection works smoothly on iPhone 5) - Provides a method to interconversion of Unity's Texture2D and OpenCV's Mat. - IDisposable is implemented in many classes.You can manage the ...

    opencv for iOS 示例

    本篇文章将深入探讨如何在iOS上运用OpenCV,并通过`iphone_opencv_test-master`示例项目进行实战解析。 首先,OpenCV for iOS 的集成通常有以下几种方式: 1. **CocoaPods**:使用CocoaPods是管理第三方库的常见...

    OpenCV for Unity 2.4.7

    (实时人脸检测可以在 iPhone 5 上流畅运行) - 提供了 Unity 的 Texture2D 和 OpenCV 的 Mat 相互转换的方法。 - IDisposable 已在许多类中实现。您可以使用 "using"语句管理资源。 - 提供了与其他发布者资源...

    opencv小项目练习,一共九个

    2.iPhone或iPad上基于标记的增强现实技术。3.无标记增强现实。4.使用OpenCV从Motion探索结构。5.基于SVM和神经网络的车牌识别。6.非刚性人脸跟踪。7.使用AAM和POSIT进行3D头部姿态估计。8.使用特征脸或Fisherfaces...

    IOS7下用openCV实现人脸检测加识别demo

    这个配套案例是一个实际的应用示例,已在iPhone 5上成功运行,展示了OpenCV的强大功能。 首先,OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它包含了大量的预训练模型...

    IOS应用源码之【应用】simple-iphone-image-processing(OpenCV).rar

    在iOS应用中,这可能涉及到捕获实时视频流,然后在每一帧上运行OpenCV算法。为了实现这一点,开发者会利用AVFoundation框架来获取摄像头输入,然后将其传递给OpenCV进行处理。 此外,为了提供用户友好的界面,项目...

    IOS应用源码之【应用】-simple-iphone-image-processing(OpenCV).rar

    在“simple-iphone-image-processing”这个项目中,我们可以看到如何将OpenCV与Objective-C或Swift语言结合使用。开发者通常会创建一个C++接口,使得OpenCV的功能可以被Objective-C或Swift调用。这涉及到设置预...

    IOS应用源码之【应用】-simple-iphone-image-processing(OpenCV).zip

    OpenCV提供了Accelerate框架和Metal Performance Shaders(MPS)的接口,可以在GPU上执行图像处理任务,从而提高处理速度,尤其在处理大型图像时。 总的来说,“simple-iphone-image-processing”项目提供了一个...

Global site tag (gtag.js) - Google Analytics