【halcon】小技巧,Union1能省时

背景:

        使用halcon时,修改以一下步骤,发现耗时激增2秒。

定义到关键代码如下:

//再和之前的选择区域取交集
HOperatorSet.Intersection(SelectedRegions0, SelectedRegions, out ho_CutLineRegion);

DebugShow(ho_CutLineRegion, "red", false, false);

发现主要是DebugShow这个函数耗时,但是之前并没有发现它耗时。它只是一个显示而已。

public void DebugShow(HObject targetRegions, string color = "red", bool bmargin = false, bool bStop = true)
{
    if (bmargin)
    {
        HOperatorSet.SetDraw(hSmart.HalconWindow, "margin");
    }
    else
    {
        HOperatorSet.SetDraw(hSmart.HalconWindow, "fill");
    }
    HOperatorSet.SetColor(hSmart?.HalconWindow, color);
    hSmart?.HalconWindow.DispObj(targetRegions);

    if (bStop)
    { 
        MessageBox.Show("");
    }
}

最后发现,是因为ho_CutLineRegion这个变量它包含了几百个对象,才导致显示耗时。

于是我修改代码如下(将 ho_CutLineRegion 联合一下 然后再显示):

//再和之前的选择区域取交集
HOperatorSet.Intersection(SelectedRegions0, SelectedRegions, out ho_CutLineRegion);

//Unionl之后,不管是显示,而是其他操作,会更加节省时间!
HOperatorSet.Union1(ho_CutLineRegion, out ho_CutLineRegion);

DebugShow(ho_CutLineRegion, "red", false, false);

激增的2秒耗时就没了!

后来我发现,不仅仅是显示,其他操作也存在这种情况,比如面积相减,选Union1也会更加省时!