如何在 iOS 工程中使用 OpenCV

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 iOS 工程中使用 OpenCV相关的知识,希望对你有一定的参考价值。

ios 工程中使用 OpenCV的方法:
一、安装OpenCV for MAC
1)首先下载opencv for mac安装源文件,解压缩
2)安装cmake程序。笔者使用的是Homebrew,在终端中输入:“brew install cmake”,自动安装cmake。
3) 进入存放解压后的opencv文件夹,新建一个空的文件夹release,进入该文件夹,编译安装opencv,使用命令如下:
mkdir release
cd release
cmake -G "Unix Makefiles" ..
make
sudo make install
4)安装好的lib文件存放在“/usr/local/lib”文件夹,h文件存放在“/usr/local/include”下。至此,opencv for Mac 安装完毕。
二、在XCode中使用OpenCV
1. 创建一个空的command line工程。
2. 在main.cpp中粘贴以下代码:
#include <iostream>

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv/cvaux.hpp>
#include <fstream>
using namespace std;

#define BYTE unsigned char
int main(int argc, const char * argv[])

#if 1
//get the image from the directed path
IplImage* img = cvLoadImage("/Users/boyuanfeng/aaa.bmp", 1);
//NSLog(img);
//create a window to display the image
cvNamedWindow("picture", 1);
//show the image in the window
cvShowImage("picture", img);
//wait for the user to hit a key
cvWaitKey(0);
//delete the image and window
cvReleaseImage(&img);
cvDestroyWindow("picture");
#endif
//return
return 0;

3. 添加lib文件:右键点击工程名,选择“Add files to..”,在文件选择对话框弹出来时输入“/”,在弹出的路径框中输入:/usr/local/lib,全选该文件夹下的全部dylib文件,添加至工程。
4. 添加lib文件查找支持: 点击工程名文件,进入“Build Settings”选项卡,在“Library Search Paths”栏中输入“/usr/local/lib”
5. 添加头文件:点击工程名文件,进入“Build Settings”选项卡,在“Header Search Paths”栏中输入:“/usr/local/include /usr/local/include/opencv”
6. 编译运行整个工程,运行成功。
参考技术A 在ios中如何利用 opencv 进行图像处理的方法:
SDK版本
作者提供的工程SDK版本可能和你开发环境的不同(我下载到的是基于4.0的),需要设置成你使用的SDK版本:在Groups&Files窗口的工程文件根目录右键-Get Info,在build栏的Base SDK一项中,改为你的SDK版本:

2. 链接标记 Other linker flags
本地的OpenCV库要链接进Xcode工程中,在Get Info的build项中,搜索 Other Linker Flags,添加相应的链接标记:
iPhone真机调试:
-lstdc++
-lz
“$(SRCROOT)/OpenCV/lib/iPhoneOS/lib/libcv.a”
“$(SRCROOT)/OpenCV/lib/iPhoneOS/lib/libcxcore.a”
模拟器调试:
-lstdc++
-lz
“$(SRCROOT)/OpenCV/lib/iPhoneSimulator/lib/libcv.a”
“$(SRCROOT)/OpenCV/lib/iPhoneSimulator/lib/libcxcore.a”

3. 头文件搜索路径 Header search paths
为方便的调用OpenCV头文件,要设置头文件搜索路径,同样在build项中搜索Header search paths,添加相应的内容:
iPhone真机调试:
“$(SRCROOT)/OpenCV/lib/iPhoneOS/include/opencv/”
“$(SRCROOT)/OpenCV/lib/iPhoneOS/include/”
模拟器调试:
“$(SRCROOT)/OpenCV/lib/iPhoneSimulator/include/opencv/”
“$(SRCROOT)/OpenCV/lib/iPhoneSimulator/include/”

4. Building OpenCV
有两种方式构建OpenCV,一种是转换到OpenCV target单独构建;一种是将OpenCV添加为主应用的依赖,构建主应用时一同构建。由于OpenCV的代码基本不需要修改,且构建进程很慢,所以建议对OpenCV进行单独构建。
在Groups & Files窗口中的Targets栏中,双击OpenCV,点击Build and Run进行编译。过程比较慢,一般会报几个error和warning,不过基本可以无视。

进行了这些设置之后,主应用基本就可以正常编译运行了:本回答被提问者采纳

在 iOS 上使用 OpenCV 检测人脸边缘/形状

【中文标题】在 iOS 上使用 OpenCV 检测人脸边缘/形状【英文标题】:Using OpenCV to detect face edges/shape on iOS 【发布时间】:2016-03-07 19:43:38 【问题描述】:

有很多关于如何使用 OpenCV 检测面部矩形的教程,例如:

//Path to the training parameters for frontal face detector
NSString *faceCascadePath = [[NSBundle mainBundle] pathForResource:@"haarcascade_frontalface_alt2"
                                                            ofType:@"xml"];

NSLog(@"%@", faceCascadePath);
const CFIndex CASCADE_NAME_LEN = 2048;
char *CASCADE_NAME = (char *) malloc(CASCADE_NAME_LEN);
CFStringGetFileSystemRepresentation( (CFStringRef)faceCascadePath, CASCADE_NAME, CASCADE_NAME_LEN);

cv::CascadeClassifier faceDetector;
faceDetector.load(CASCADE_NAME);

std::vector<cv::Rect> faceRects;
double scalingFactor = 1.1;
int minNeighbors = 2;
int flags = 0;
cv::Size minimumSize(30, 30);
faceDetector.detectMultiScale(image, faceRects, scalingFactor, minNeighbors, flags, minimumSize);

但是,就像它的 CoreImage 等效项一样,它仅将人脸的边界检测为矩形。我想要的是检测点中的面部边缘,以便我可以围绕用户的面部绘制一条路径,类似于 Snapchat 的做法。

谁能指出我正确的方向?计算机视觉和图像处理不是我的强项,所以我一直在努力完成这样的事情。

【问题讨论】:

【参考方案1】:

查看主动外观模型。 这可能会有所帮助:http://16423.courses.cs.cmu.edu/slides/Lecture_23.pdf

Snapchat 收购了 Looksery 以启用他们的动画镜头。 http://techcrunch.com/2015/09/15/snapchat-looksery/

【讨论】:

以上是关于如何在 iOS 工程中使用 OpenCV的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 项目中减小 openCV 框架大小

如何使用opencv在ios中编写一个简单的图像加载函数

android如何在 java opencv 中查找最大轮廓

网络工程师如何在Centos 7 安装OpenCV

如何在我的 OpenCV iOS 应用程序中捆绑/存储应用程序图像数据?

如何将 openCV 导入 iOS 8 项目