通过halcon 从一张有两个几何体的图像中找出来,放入 region 中, 再connect操作把这两个几何体分开。
导出的cpp代码如下:
//D:\machinevision\halcon\s1\s1.cpp
void action()
{
using namespace Halcon;
// Local iconic variables
Hobject Image, Region, ImageScaled, Region1;
Hobject Image1, ConnectedRegions, Circle;
// Local control variables
HTuple WindowHandle, Area, Row, Column, Newtuple;
HTuple Sqrt, Area1, Row1, Column1;
//initGraphicWindow ()
set_window_attr("background_color","black");
open_window(0,0,800,600,0,"","",&WindowHandle);
HDevWindowStack::Push(WindowHandle);
if (HDevWindowStack::IsOpen())
set_color(HDevWindowStack::GetActive(),"green");
read_image(&Image, "D:/machinevision/halcon/s1/somecircle.png");
threshold(Image, &Region, 0, 200);
//bin_threshold (ImageScaled, Region1)
read_image(&Image1, "red");
if (HDevWindowStack::IsOpen())
disp_obj(Region, HDevWindowStack::GetActive());
connection(Region, &ConnectedRegions); //把两个几何体分开,分别在Area[0]/Area[1] , Row[0]/Row[1] 里
if (HDevWindowStack::IsOpen())
disp_obj(ConnectedRegions, HDevWindowStack::GetActive());
area_center(ConnectedRegions, &Area, &Row, &Column);
tuple_gen_const(1, HTuple(Area[0])/3.1415, &Newtuple);
tuple_sqrt(Newtuple, &Sqrt);
if (HDevWindowStack::IsOpen())
set_color(HDevWindowStack::GetActive(),"yellow");
gen_circle(&Circle, HTuple(Row[0]), HTuple(Column[0]), Sqrt);
area_center(Region, &Area1, &Row1, &Column1);
tuple_gen_const(1, Area1/3.1415, &Newtuple);
tuple_sqrt(Newtuple, &Sqrt);
if (HDevWindowStack::IsOpen())
set_color(HDevWindowStack::GetActive(),"blue");
gen_circle(&Circle, Row1, Column1, Sqrt);
write_region(Region1, "regiontree.reg");
}