- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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);
imageList
是 List<UImage>
因为我正在处理多个检测到的矩形。
observation
是 VNRectangleObservation
类型的单个观察值.
关于ios - 使用 VNRectangleObservation 裁剪 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59537573/
我开发了使用 Vision Framework 检测矩形的单 View 应用程序。视频输出和检测到的矩形将显示在 UIView 的子层中(见下图)。在 CGPoint 中由 VNRectangleOb
我需要转换 VNRectangleObservation 收到的 CGPoints (bottomLeft,bottomRight, topLeft, topRight) 到另一个坐标系(例如屏幕上
我正在使用 Vision 框架来检测捕获的照片中的矩形文档。检测并绘制文档周围的路径工作正常。然后我想将图像裁剪为仅检测到的文档。我成功裁剪了图像,但坐标似乎没有对齐,裁剪后的图像只是检测到的文档的一
我正在通过设备的摄像头捕捉视频,并将其提供给 Vision 框架以执行矩形检测。代码看起来像这样(为简洁起见进行了压缩……与此问题无关的隐藏行): func captureOutput(_ outpu
我正在使用 CoreML SqueezeNet 模型从图像中检测纸张或矩形。 我已经根据苹果文档创建了模型和请求。 guard let model = try? VNCoreMLModel(for:
我是一名优秀的程序员,十分优秀!