如何在 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的主要内容,如果未能解决你的问题,请参考以下文章
android如何在 java opencv 中查找最大轮廓