【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也会更加省时!