【问题标题】:how to distort non uniform UIImage into a proportion如何将不均匀的 UIImage 扭曲成比例
【发布时间】:2014-08-19 11:26:09
【问题描述】:

我已经尝试过,但无法弄清楚如何将图像调整为正确的形状。我裁剪了图像,我想将其转换为矩形或正方形等比例,但尚未找到解决方案。谁能帮我解决这个问题?

变成这样的形式

【问题讨论】:

    标签: ios uiimage core-graphics


    【解决方案1】:

    苹果内置文档没有用于此的 api。我用opencv.framework 找到了这种透视变换的api。 Opencv 包含许多用于透视变换的 api。我已经在 c++ api(在 imgproc.hpp 中找到)下进行了测试,并且对我来说工作正常。检查这个。

    void warpPerspective( InputArray src, OutputArray dst,
                                       InputArray M, Size dsize,
                                       int flags=INTER_LINEAR,
                                       int borderMode=BORDER_CONSTANT,
                                       const Scalar& borderValue=Scalar());
    

    这里他们还提供了 将 UIImage 对象转换为 InputArray(src) 的 api。了解这一点可能需要很长时间。

    注意:你应该花一些时间来了解一下opencv。

    【讨论】:

    • 你的回答很有帮助,但我被转换矩阵困住了。你对变换矩阵计算有更多的了解吗?
    • @Retro stackoverflow.com/questions/13269432/… - 接受的答案应该对您有所帮助。
    • @TimurKuchkarov 很棒的发现,对未来的访客更有帮助。我想,你还没有看到这条线 cv::warpPerspective(original, undistorted, cv::getPerspectiveTransform(src, dst), cvSize(maxWidth, maxHeight)); 与上面的答案相同。
    • @Mani 是的,warpPerspective 在那里,但该答案有一些样本可能会有所帮助。
    【解决方案2】:

    我怀疑您是否有可能这样做,因为您必须找到原始图像的尺寸和完整 xyz,然后对新图像进行调整。这会明显地扭曲图像,很可能使图像无法使用。

    我们尝试了一种类似的方法来扫描带有条形码的文档并使用软件读取它们,但由于像素失真,我们不得不放弃该项目。

    【讨论】:

      【解决方案3】:

      您可以使用 CGAffineTransforms 来做到这一点。您将链接一系列 CGAffineTransforms 以获得最终形状,但该过程的技巧是您旋转图像,使失真轴与 x 或 y 轴完全一致,然后使用固定另一个轴的比例到 1. 此代码来自一个应用程序,您可以在其中使用两根手指通过捏合手势扭曲和图像:

              CGAffineTransform rotate = CGAffineTransformMakeRotation(-self.pinchAngle);
              [self.bPath applyTransform:rotate];
      
              CGAffineTransform scale = CGAffineTransformMakeScale(prop , 1);
              [self.bPath applyTransform:scale];
      
      
              CGAffineTransform rotate2 = CGAffineTransformMakeRotation(self.pinchAngle);
              [self.bPath applyTransform:rotate2];
      

      这里的 self.pinchAngle 是与 x 轴的角度,prop 是比例变化,1 表示没有变化。您可以使用 Core Graphics 处理实际的 UIImage,也可以将其应用于 UIImageView。如果你真的很勇敢,你可以做矩阵数学并得到一个单一的变换矩阵。

      【讨论】:

        【解决方案4】:

        我绝对支持 Mani 所说的话。 OpenCV 是一个很棒的地方。它也可能会帮助您检测边缘。

        如果您不想深入研究 C++ 领域 - AGGeometryKit 是一个选项(使用开发分支)。免责声明:我是图书馆的维护者。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-12-16
          • 2021-12-10
          • 2020-09-07
          相关资源
          最近更新 更多