将emgucv对象mcvbox2d放大到矩形对象

时间:2015-06-07 07:39:53

标签: c# emgucv

我想将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)点是否从盒子的中心开始。

有人对此有任何疑问吗?

1 个答案:

答案 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

     }