像CamScanner一样裁剪UIImage

12

我在我的应用程序功能中遇到了困难,我想要类似于Cam Scanner Cropping的裁剪功能。 CAM-SCANNER的屏幕如下: 我已经创建了类似的裁剪视图。

输入图像描述

输入图像描述

我已经获得了四个角的CGPoint。但是如何获得倾斜的裁剪图像。

如果可能,请提供一些建议。


你好,你能告诉我如何实现上述内容吗?或者如果可能的话,能分享任何教程或有用的链接吗? - ankit yadav
嗨,开发者,你解决了这个问题吗?请问你能加上这个功能的代码吗?我需要和这个一模一样的。 - Mani
3个回答

5
这是一个透视变换问题。在这种情况下,它们正在将 3D 投影绘制在 2D 平面上。
第一张图像具有四边形选择角落,当您将其转换为矩形形状时,您将需要添加更多的像素信息(插值)或删除一些像素。
因此,现在实际的问题是向裁剪图像添加额外的像素信息并进行投影以生成第二个图像。它可以用各种方式实现: <> 您可以通过应用透视变换矩阵和插值来自己实现它。 <> 您可以使用 OpenGL。 <> 您可以使用 OpenCV。 .. 还有许多其他实现方法。
我使用 OpenCV 解决了这个问题。以下 OpenCV 函数将帮助您实现此目标。
  1. cvPerspectiveTransform第一个函数会使用源和目标投影坐标计算变换矩阵,在你的情况下,src数组将包含所有角落的CGPoint值。而dest将具有矩形投影点,例如{(0,0)(200,0)(200,150)(0,150)}。

  2. cvWarpPerspective一旦获得变换矩阵,您需要将其传递给第二个函数。您可以访问这thread

可能还有一些其他替代OpenCV库的方法,但它具有良好的图像处理算法集合。

iOS应用程序与opencv库可在eosgarden上找到。


嘿,你怎么获取这个正方形的CGPoint,以便我们可以绘制UIview点来进行裁剪? - Mukesh

3
我看到2种可能性。第一种是计算一个倾斜图像的变换矩阵,并将其安装在您视图层的CATransform3D属性中。
这很简单,假设您知道如何组成能够拉伸的变换矩阵。我从未学过如何构造拉伸或扭曲图像的变换矩阵,所以我无法提供任何帮助。我建议您搜索有关变换矩阵和拉伸/扭曲的信息。
另一种方法是将您要裁剪的部分转换为OpenGL纹理,并将纹理映射到输出上。实际的纹理绘制部分很容易,但要做大约1000千字节的OpenGL设置和很多学习才能完成任何工作。如果您想追求这条路线,我建议您使用新的iOS 5 GLKit搜索简单的2D纹理示例。

0

使用链接中提供的代码:http://www.hive05.com/2008/11/crop-an-image-using-the-iphone-sdk/

不要使用CGRect和CGContextClipToRect,而是尝试使用CGContextEOClip或CGContextClosePath。

虽然我没有尝试过这个...但我已经尝试在TouchesBegan、TouchesMoved和TouchesEnd事件中使用CGContextClosePath绘制闭合路径。

希望这能给你的问题提供更多的见解...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接