Ios 如何将非均匀图像扭曲成一定比例

Ios 如何将非均匀图像扭曲成一定比例,ios,uiimage,core-graphics,Ios,Uiimage,Core Graphics,我已经试过了,但还没有弄清楚如何将图像调整为正确的形状。我对图像进行了裁剪,我想将其转换为矩形或正方形等比例,但尚未找到解决方案。有人能帮我吗 有点像这样 苹果内置的文档没有api。我已经找到了这种透视转换的api。Opencv包含许多用于透视变换的api。我已经测试了C++的API(在imgPRO.HPP中找到),并且对我来说很好。看看这个 void warpPerspective( InputArray src, OutputArray dst,

我已经试过了,但还没有弄清楚如何将图像调整为正确的形状。我对图像进行了裁剪,我想将其转换为矩形或正方形等比例,但尚未找到解决方案。有人能帮我吗

有点像这样


苹果内置的文档没有api。我已经找到了这种透视转换的api。Opencv包含许多用于透视变换的api。我已经测试了C++的API(在imgPRO.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。

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


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

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

如果你不想深入到C++领域,那就是一个选项(使用开发分支)。免责声明:我是该库的维护者


您可以使用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表示不变。您可以使用核心图形处理实际的UIImage,也可以将其应用于UIImageView。如果你真的很勇敢,你可以做矩阵数学,最后得到一个变换矩阵。

你的答案很有帮助,但我还是坚持用变换矩阵。你对转换矩阵的计算有更多的了解吗?@回复接受的答案应该会对你有所帮助。@TimurKuchkarov的发现非常好,对未来的访问者更有帮助。我想,您还没有看到这一行<代码>cv::warpPerspective(原始、未失真、cv::getPerspectiveTransform(src、dst)、cvSize(maxWidth、maxHeight))与上面的答案相同。@Mani-True,透视图在那里,但该答案有一些示例可能会有所帮助。