9

我有单色图像,我需要从中调整某些部分的大小,具有不同的比例。所需结果显示在图像中。我看过在 opengles 中应用网格,但我找不到一些示例代码或更详细的教程。我也看过imgwrap但据我所知,这个库需要 qt 框架。任何想法,示例代码或进一步阅读的链接将不胜感激,谢谢。在此处输入图像描述

4

6 回答 6

8

您面临的问题在计算机图形学中称为“图像变形”。首先,您必须在原始图像中定义一些控制点,并在示例目标图像中定义相应点。然后你必须计算一个密集的位移场(在这个应用程序中也称为环绕网格)并将这个场简单地应用于原始图像。

更实际的是:您在 iOS 上的最佳选择是在 OpenGL 中创建一个 2D 顶点网格。将您的原始图像映射为该网格上的纹理,并通过置换其一些点来使原始网格变形。然后,您只需使用 glReadPixels 对生成的图像进行屏幕截图。

我不知道任何可以实现这种位移场映射的 CIFilter。

更新:我还发现了一个示例代码,它使用 8 个控制点通过 OpenCV 变形图像。http://engineeering.blogspot.it/2008/07/image-morphing-with-opencv.html

OpenCV 有适用于 iOS 的端口,因此您也可以在目标设备上对上面链接中的代码进行简单的实验。

于 2013-07-03T08:09:27.053 回答
3

我不确定,但我建议如果你想做这种类型的工作,那么你需要为图像裁剪一些部分,并在这个裁剪的图像部分中应用你的调整大小功能/功能,并按原样放置。我只是给出我的意见,不确定这对你是否正确。

在这里我也给你问题的链接,请阅读它,它可能对你的情况有帮助:

如何在 iPhone 应用程序中仅缩放图像的特定部分?

于 2013-07-03T07:36:39.870 回答
2

一些想法:

  1. 使用 CGBitmapContextCreateImage() 将 UIImage 的部分复制到不同的 CGContext 中,复制周围的部分,单独缩放,然后重新组合在一起。
  2. 对图像的某些部分使用 CIFilter 效果,遮盖要缩放的部分。(核心映像编程指南
于 2013-06-28T14:24:28.410 回答
2

我建议你在 GitHub 上查看 Brad Larson 的GPUImage项目。在视觉效果下,您会找到过滤器,例如GPUImageBulgeDistortionFilter,您应该能够适应您的需求。

于 2013-07-04T06:25:17.390 回答
1

你可能想看看 OpenGL 着色器。我要做的是将图像作为纹理加载,应用片段着色器(这是一个小程序,可以让您改变扭曲图像),将结果渲染回纹理,然后显示该纹理或将其保存为位图。

这不会很简单,但是有一些示例代码可以用于其他扭曲。这是着色器中的一个漩涡: http ://www.geeks3d.com/20110428/shader-library-swirl-post-processing-filter-in-glsl/

我认为在不涉及 OpenGL 的情况下没有更简单的方法可以做到这一点,而且您可能也不会在 GPU 之外找到出色的性能。

于 2013-07-03T23:47:24.337 回答
1

您可能想尝试使用薄板样条和 OpenCV 的示例。在我看来,这是最容易尝试的在线解决方案。

于 2013-07-04T04:47:38.893 回答