1

我正在构建一个“洞中的脸”或“照相亭”类型的应用程序,其中用户的脸可以使用人脸检测技术插入到现有图像中。我UIImage通过使用人脸检测来获得“抠图”人脸边界。

看看下面这个人耳朵附近的脸和头发之间的清晰边界。这种过渡如何才能更好地平滑和融合在一起?我知道有些应用程序可以“扩展”图片,是否有某种众所周知的算法可以用于此目的?

人脸检测示例

我的问题是如何将用户的脸粘贴到这样的图像中?我正在考虑在切口的脸上添加一个透明蒙版(有效地为脸部切出一个洞),并从位于切口后面的视图中的实时摄像机馈送中替换用户的脸部。

我担心的是,这种方法会在切割面的边缘周围产生锋利的边缘。我怎样才能平滑这个边缘?我的透明蒙版是否应该是一个渐变,而不是纯 alpha 通道,中间的 alpha 通道为 1,而外边缘的通道更少?

如何混合两个图像并使它们之间的边界消失或不那么明显?

4

2 回答 2

0

您可以使用两个 UIImageview 加载两个 PNG 文件,您可以使用 Photoshop 等图像编辑应用程序保存 PNG 保留透明度。因此,您可以避免使用蒙版,只需使用带有渐变的 PNG,该渐变在需要时以透明度结束。

请记住,当您添加 UIImageview 时:

UIImageView* myPortrait = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"myPortrait" ofType:@"png"]]];
myPortrait.frame = CGRectMake(50, 50, 80, 100);
[self.view addSubview:myPortrait];
UIImageView* photoWithHole = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"photoWithHole" ofType:@"png"]]];
photoWithHole.frame = CGRectMake(0, 0, 320, 480);
[self.view addSubview:photoWithHole];

您应该记住,图像是以先进后出的方式显示的,因此请记住在有孔的照片之前添加肖像。

于 2012-05-03T13:53:06.890 回答
0

检查 OpenCV 库。几乎所有您希望的功能通常都使用 OpenCV 执行。

OpenCV 是一个 C++ 图像检测和处理库。有一个 objC++ 包装框架 xCode。

学习 iOS 的 openCV 基础知识。

将 OpenCV 框架嵌入到您的 xCode 项目中。

将 viewController 的 m 扩展名更改为 mm

将 viewController 的 h 扩展名更改为 hpp

导入opencv2/opencv.hpp ... ... ... ...

你应该检查的东西:http: //docs.opencv.org/master/d7/d8b/tutorial_py_face_detection.html#gsc.tab=0

http://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_Object_Detection_Face_Detection_Haar_Cascade_Classifiers.php

https://www.youtube.com/watch?v=Gdy3fLS_fZA

或者你可以使用 CoreImage

https://maniacdev.com/2011/11/tutorial-easy-face-detection-with-core-image-in-ios-5

于 2015-09-18T11:58:15.000 回答