我想将mcvbox2d对象放大为矩形对象
首先我做的是从轮廓对象获得一个盒形轮廓。然后,我提取了盒子的所有角落。对所有角落进行了分类。之后,从角落偏移5个像素,并将宽度和高度放大到10个像素更大
MCvBox2D box = approxContour.GetMinAreaRect();
PointF[] corners = box.GetVertices();
corners = corners.OrderBy(s => s.X).ThenBy(s => s.Y).ToArray();
Rectangle enlargedROI = new Rectangle((int)Math.Round(corners[0].X), (int)Math.Round(corners[0].Y), (int) Math.Round(box.size.Width), (int)Math.Round(box.size.Height));
enlargedROI.X -= 5;
enlargedROI.Y -= 5;
enlargedROI.Width += 10;
enlargedROI.Height += 10;
此外,我还需要检查放大的框是否必须在图像大小范围内。如果不满足此条件,则此框将从此检查中删除。
然而,困扰我的是获得角落的负面价值。这让我想知道Mcvbox2d(0,0)点是否从盒子的中心开始。
有人对此有任何疑问吗?
答案 0 :(得分:1)
我终于得到了自己的解决方案。实际上,McVBox2具有中心值,这意味着我必须自己进行计算以获得框的左上角坐标。我也进行了边界检查。下面是代码。
enlargedROI.X -= 3; //offset by 3 pixel
enlargedROI.Y -= 3;
enlargedROI.Width += 60; //enlarge to 60px
enlargedROI.Height += 30;
if (!(enlargedROI.X < 0) && !(enlargedROI.Y < 0))
{
if (!(enlargedROI.Width + enlargedROI.X > gray.Width) && !(enlargedROI.Height + enlargedROI.Y > gray.Height))
{
box.Offset(-3, -3);
box.size = new SizeF(box.size.Width + 60, box.size.Height + 30);
Image<Gray, Byte> plate = imageToOCR.Copy(box);
//further implementation
}