IOS 中调用opencv进行人脸检测

简介:

首先利用ios的 AVCaptureStillImageOutput,AVCaptureSessionAVCaptureVideoPreviewLayer 抓图并显示到 UIImageView

然后吧UIIMage转换成opencv中的IplImage

利用下面这条语句

IplImage *image = [self CreateIplImageFromUIImage:originalImage];

剩下的就是opencv中的操作和处理

代码如下:

 

+ (UIImage *) opencvFaceDetect:(UIImage *)originalImage {
cvSetErrMode(CV_ErrModeParent);

IplImage *image = [self CreateIplImageFromUIImage:originalImage];

// Scaling down
IplImage *small_image = cvCreateImage(cvSize(image->width/2,image->height/2), IPL_DEPTH_8U, 3);
cvPyrDown(image, small_image, CV_GAUSSIAN_5x5);
int scale = 2;

// Load XML
NSString *path = [[NSBundle mainBundle] pathForResource:@"haarcascade_frontalface_default" ofType:@"xml"];
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad([path cStringUsingEncoding:NSASCIIStringEncoding], NULL, NULL, NULL);
CvMemStorage* storage = cvCreateMemStorage(0);

// Detect faces and draw rectangle on them
CvSeq* faces = cvHaarDetectObjects(small_image, cascade, storage, 1.2f, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(20, 20), cvSize(100, 100));
cvReleaseImage(&small_image);

NSLog(@"found %d faces in image", faces->total);

// Create canvas to show the results
CGImageRef imageRef = originalImage.CGImage;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef contextRef = CGBitmapContextCreate(NULL, originalImage.size.width, originalImage.size.height, 8, originalImage.size.width * 4,
colorSpace, kCGImageAlphaPremultipliedLast|kCGBitmapByteOrderDefault);
CGContextDrawImage(contextRef, CGRectMake(0, 45, originalImage.size.width, originalImage.size.height), imageRef);

CGContextSetLineWidth(contextRef, 4);
CGContextSetRGBStrokeColor(contextRef, 0.0, 0.0, 1.0, 0.5);

// Draw results on the iamge
for(int i = 0; i < faces->total; i++) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// Calc the rect of faces
CvRect cvrect = *(CvRect*)cvGetSeqElem(faces, i);
CGRect face_rect = CGContextConvertRectToDeviceSpace(contextRef, 
CGRectMake(cvrect.x * scale, cvrect.y * scale, cvrect.width * scale, cvrect.height * scale));
CGContextStrokeRect(contextRef, face_rect);

[pool release];
}

UIImage *returnImage = [UIImage imageWithCGImage:CGBitmapContextCreateImage(contextRef)];
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);

cvReleaseMemStorage(&storage);
cvReleaseHaarClassifierCascade(&cascade);

return returnImage;
}

本文转自博客园知识天地的博客,原文链接:IOS 中调用opencv进行人脸检测,如需转载请自行联系原博主。


相关文章
|
4月前
|
算法 IDE 开发工具
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
|
7月前
|
计算机视觉 C++ Python
OpenCV人脸检测打卡系统
OpenCV人脸检测打卡系统
54 0
|
4月前
|
XML 算法 计算机视觉
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
99 1
|
1月前
|
前端开发 Java Maven
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
java集成opencv(不踩坑),实现人脸检测小demo(含上传人像图片识别接口),windows,IDEA,Springboot
168 0
|
4月前
|
编解码 计算机视觉 Ruby
Python图像处理(二)opencv人脸检测
人脸检测部分,我们需要使用到opencv,看清楚,是opencv,不是opencv_python 首先,我们打开opencv的官网:opencv.org/# 当然,纯英文的。 我们找到library目录下的release目录: 选择你需要的版本,下载对应的平台就好。如下图所示,我当然要尝试最新版的了。 下载完成之后,双击安装就可以了。 我理解的人脸检测呢,其实就是opencv根据采集到的图像与其库中预置的人脸特征去比对,有符合人脸特征的,就说明采集到的图像是有人脸的。初学,我也不清楚我说的是否正确。 有不对的地方,欢迎大佬指出。
49 0
|
8月前
|
文字识别 算法 IDE
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
OpenCV常用的 7 个示例:从读取到人脸检测(Python版)
|
11月前
|
机器学习/深度学习 人工智能 算法
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测
217 0
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
|
文字识别 算法 Swift
毕业设计在iOS上使用OpenCV实现图片中的文字框选文字识别
毕业设计在iOS上使用OpenCV实现图片中的文字框选文字识别
466 0
毕业设计在iOS上使用OpenCV实现图片中的文字框选文字识别
|
机器学习/深度学习 算法 Shell
基于opencv卷积网络实现人脸检测和性别分类 附项目代码
基于opencv卷积网络实现人脸检测和性别分类 附项目代码
96 0
基于opencv卷积网络实现人脸检测和性别分类 附项目代码
|
机器学习/深度学习 人工智能 数据处理
基于opencv的人脸检测
基于opencv的人脸检测
157 0
基于opencv的人脸检测