gpt4 book ai didi

ios - 使用 VNRectangleObservation 裁剪 UIImage

转载 作者:行者123 更新时间:2023-11-29 05:12:35 27 4
gpt4 key购买 nike

我正在使用 Vision 框架来检测捕获的照片中的矩形文档。检测并绘制文档周围的路径工作正常。然后我想将图像裁剪为仅检测到的文档。我成功裁剪了图像,但坐标似乎没有对齐,裁剪后的图像只是检测到的文档的一部分,其余部分只是文档后面的 table 。我正在使用以下裁剪代码:

private UIImage CropImage(UIImage image, CGRect rect, float scale)
{
var drawRect = new CGRect(rect.X, rect.Y, rect.Size.Width, rect.Size.Height);
using (var cgImage = image.CGImage.WithImageInRect(drawRect))
{
var croppedImage = UIImage.FromImage(cgImage);
return croppedImage;
};
}

使用以下参数:

图像与我成功绘制矩形路径的 UIImage 相同。

矩形是VNRectangleObservation.BoundingBox。这是标准化的,所以我使用 image.size 对其进行缩放。这与我绘制矩形路径时所做的缩放相同。

比例是 1f,但我目前忽略这一点。

裁剪后的图像通常看起来大小合适,但它向上和向左移动,从而切掉了文档的下侧和右侧。任何帮助将不胜感激。

最佳答案

对于发现此问题的其他人来说,问题似乎是 CGImage裁剪图像时旋转导致 VNRectangleObservation不再排队。我用了这篇文章,Tracking and Altering Images ,使用 CIFilter 获得可行的解决方案.裁剪代码如下:

var ciFilter = CIFilter.FromName("CIPerspectiveCorrection");
if (ciFilter == null) continue;

var width = inputImage.Extent.Width;
var height = inputImage.Extent.Height;
var topLeft = new CGPoint(observation.TopLeft.X * width, observation.TopLeft.Y * height);
var topRight = new CGPoint(observation.TopRight.X * width, observation.TopRight.Y * height);
var bottomLeft = new CGPoint(observation.BottomLeft.X * width, observation.BottomLeft.Y * height);
var bottomRight = new CGPoint(observation.BottomRight.X * width, observation.BottomRight.Y * height);

ciFilter.SetValueForKey(new CIVector(topLeft), new NSString("inputTopLeft"));
ciFilter.SetValueForKey(new CIVector(topRight), new NSString("inputTopRight"));
ciFilter.SetValueForKey(new CIVector(bottomLeft), new NSString("inputBottomLeft"));
ciFilter.SetValueForKey(new CIVector(bottomRight), new NSString("inputBottomRight"));

var ciImage = inputImage.CreateByApplyingOrientation(CGImagePropertyOrientation.Up);
ciFilter.SetValueForKey(ciImage, CIFilterInputKey.Image);
var outputImage = ciFilter.OutputImage;
var uiImage = new UIImage(outputImage);
imageList.Add(uiImage);

imageListList<UImage>因为我正在处理多个检测到的矩形。

observationVNRectangleObservation 类型的单个观察值.

关于ios - 使用 VNRectangleObservation 裁剪 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59537573/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com