Halcon Measure the distance between the holes

//
double start;
double end ;
start=clock();
// TODO: Add your control notification handler code here
Hobject image,ImageMean,DarkPixel,ConnecttionRegions,SelectionRegions,EdgeFirst,ROI;
Hlong width,height,MeasureHandle;
double Row=225;
double Column=285;
double Radius=107;
double AngleStart=-(55.0/360.0)*2*PI;
double AngleEnd=(170.0/360.0)*2*PI;
double RowPoint;
double ColPoint;
HTuple RowEdge,ColumnEdge,Amplitude,Distance;
read_image(&image,"zeies.png");

CRect rtWindow1;
HTuple Window_HANDLE;
GetDlgItem(IDC_DISPIMAGE)->GetClientRect(&rtWindow1);
HWND hlmgWnd=GetDlgItem(IDC_DISPIMAGE)->m_hWnd;
open_window(rtWindow1.left,rtWindow1.top,rtWindow1.Width(),rtWindow1.Height(),(Hlong)hlmgWnd,"visible","",&Window_HANDLE);
disp_obj(image,Window_HANDLE);
set_color(Window_HANDLE,"blue");
get_image_size(image, &width, &height);//获取图像宽、高
//get_points_ellipse(double Angle, double Row, double Column, double Phi, double Radius1, double Radius2, double *RowPoint, double *ColPoint);
get_points_ellipse(AngleStart+AngleEnd,Row,Column,0,Radius,Radius,&RowPoint,&ColPoint);
//disp_arc(Hlong WindowHandle, double CenterRow, double CenterCol, double Angle, Hlong BeginRow, Hlong BeginCol);
set_color(Window_HANDLE,"blue");
disp_arc(Window_HANDLE,Row,Column,AngleEnd,RowPoint,ColPoint);
// measure_pos(const Halcon::Hobject &Image, Hlong MeasureHandle, double Sigma, double Threshold, const char *Transition, const char *Select, Halcon::HTuple *RowEdge, Halcon::HTuple *ColumnEdge, Halcon::HTuple *Amplitude, Halcon::HTuple *Distance);
// gen_measure_arc(double CenterRow, double CenterCol, double Radius, double AngleStart, double AngleExtent, double AnnulusRadius, Hlong Width, Hlong Height, const char *Interpolation, Hlong *MeasureHandle);
gen_measure_arc(Row,Column,Radius,AngleStart,AngleEnd,10,width,height,"nearest_neighbor",&MeasureHandle);
measure_pos(image,MeasureHandle,1,10,"all","all",&RowEdge,&ColumnEdge,&Amplitude,&Distance);
// disp_line(Hlong WindowHandle, double Row1, double Column1, double Row2, double Column2);
//disp_line(Window_HANDLE,RowEdge[1],ColumnEdge[1],RowEdge[2],ColumnEdge[2]);
set_color(Window_HANDLE,"red");
double a=RowEdge[1].D();
double b=RowEdge[2].D();
double c=ColumnEdge[1].D();
double d=ColumnEdge[2].D();
disp_line(Window_HANDLE,a,c,b,d);


end=clock();
cost_time=(end-start)/1000;

UpdateData(FALSE);

由此可見a ,b ,c ,d在halcon裡面disp_line的type是吃double所以要轉換一下才行

最後透過歐幾理得量測 ((c-a)^2+(d-b)^2)^(0.5)可以得到此工件在圓弧切線段上工件的寬度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值