【发布时间】:2014-08-19 11:26:09
【问题描述】:
我已经尝试过,但无法弄清楚如何将图像调整为正确的形状。我裁剪了图像,我想将其转换为矩形或正方形等比例,但尚未找到解决方案。谁能帮我解决这个问题?
变成这样的形式
【问题讨论】:
标签: ios uiimage core-graphics
我已经尝试过,但无法弄清楚如何将图像调整为正确的形状。我裁剪了图像,我想将其转换为矩形或正方形等比例,但尚未找到解决方案。谁能帮我解决这个问题?
变成这样的形式
【问题讨论】:
标签: ios uiimage core-graphics
苹果内置文档没有用于此的 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。
【讨论】:
cv::warpPerspective(original, undistorted, cv::getPerspectiveTransform(src, dst), cvSize(maxWidth, maxHeight)); 与上面的答案相同。
我怀疑您是否有可能这样做,因为您必须找到原始图像的尺寸和完整 xyz,然后对新图像进行调整。这会明显地扭曲图像,很可能使图像无法使用。
我们尝试了一种类似的方法来扫描带有条形码的文档并使用软件读取它们,但由于像素失真,我们不得不放弃该项目。
【讨论】:
您可以使用 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。如果你真的很勇敢,你可以做矩阵数学并得到一个单一的变换矩阵。
【讨论】:
我绝对支持 Mani 所说的话。 OpenCV 是一个很棒的地方。它也可能会帮助您检测边缘。
如果您不想深入研究 C++ 领域 - AGGeometryKit 是一个选项(使用开发分支)。免责声明:我是图书馆的维护者。
【讨论】: