我尝试过,但无法弄清楚如何将图像调整为正确的形状。我有一个裁剪图像,我想将其转换为矩形或方形的比例,但没有找到解决方案。任何人都可以帮我这个吗?
进入这种形式
答案 0 :(得分: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。
答案 1 :(得分:0)
我怀疑你有可能做到,因为你必须找到原始想象的尺寸和完整xyz然后对新图像进行调整。这将使图像严重扭曲,更可能使图像无法使用。
我们尝试了类似的方法来扫描带有条形码和软件读取文档的文档,因为我们不得不放弃项目的像素失真。
答案 2 :(得分:0)
我绝对支持玛尼说的话。 OpenCV是一个很棒的地方。它也可能有助于你检测边缘。
如果你不想深入挖掘c ++土地 - AGGeometryKit是一个选项(使用开发分支)。免责声明:我是图书馆的维护者。
答案 3 :(得分:0)
你可以用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。如果你真的很勇敢,你可以做矩阵数学,最后得到一个变换矩阵。