halcon的一维测量核心步骤如下:
1.通过一个矩形ROI创建测量对象,他的ROI是一个Rect2矩形,将在这个矩形phi方向上测量。
2.调用单个尺寸测量或多个尺寸测量。
3.关闭测量对象。
代码如下:
void
TestProc1D(
QWidget
*
w
)
{
QSize
size =
w
->size();
HWindow
* display =
new
HWindow
(0,0,size.width(),size.height(),(
HWND
)
w
->winId(),
""
,
""
);
HImage
image;
image.ReadImage(
"F:/image/ic_pin.png"
);
Hlong
width,height;
image.GetImageSize(&width,&height);
display->SetPart(0,0,height,width);
display->DispImage(image);
double
row,col,phi,lenght1,lenght2;
display->DrawRectangle2(&row,&col,&phi,&lenght1,&lenght2);
HMeasure
measure(row,col,phi,lenght1,lenght2,image.Width(),image.Height(),
"nearest_neighbor"
);
HTuple
rowEdge,colEdge,amps,distances;
measure.MeasurePos(image,1,30,
"all"
,
"all"
,&rowEdge,&colEdge,&s,&distances);
display->DispLine(rowEdge,colEdge-lenght2,rowEdge,colEdge+lenght2);
Hlong
n = distances.Length();
qDebug
() <<
"count : "
<< n;
for
(
Hlong
i=0; i<n; i++)
{
qDebug
() << distances[i].D() <<
";"
;
}
//display->DrawRectangle2(&row,&col,&phi,&lenght1,&lenght2);
display->DrawPoint(&row,&col);
measure.TranslateMeasure(row,col);
measure.MeasurePos(image,1,30,
"all"
,
"all"
,&rowEdge,&colEdge,&s,&distances);
display->DispLine(rowEdge,colEdge-lenght2,rowEdge,colEdge+lenght2);
n = distances.Length();
qDebug
() <<
"count : "
<< n;
for
(
Hlong
i=0; i<n; i++)
{
qDebug
() << distances[i].D() <<
";"
;
}
}
这里核心调用了
MeasurePos这个函数,还有另外一个函数
MeasurePair这两个函数的功能相同,只是输出结果的形式不同,
MeasurePair的数据时配对输出的。在实际使用中需要调整
MeasurePos函数的参数满足测试需求,核心的是一个阈值和一个模糊化因子。