halcon-gen_ellipse_contour_xld创建椭圆弧的XLD轮廓
作者:互联网
在HDevelop中
dev_close_window () read_image (Image, 'D:/bb/tu/8.jpg') rgb1_to_gray (Image, GrayImage) edges_sub_pix (GrayImage, Edges, 'canny', 1, 5, 10) *亚像素边缘 select_shape_xld (Edges, SelectedXLD, 'contlength', 'and', 367, 369) segment_contours_xld (SelectedXLD, ContoursSplit, 'lines_ellipses', 5, 4, 2) select_shape_xld (ContoursSplit, SelectedXLD1, 'contlength', 'and', 72, 77) fit_ellipse_contour_xld (SelectedXLD1, 'fitzgibbon', -1, 0, 0, 200, 3, 2, Row, Column, Phi, Radius1, Radius2, StartPhi, EndPhi, PointOrder) *对XLD轮廓做近似椭圆计算--拟合椭圆--获得椭圆数据 *参数1:输入xld轮廓 *参数2:椭圆拟合算法 * 'fhuber', 'fitzgibbon', 'focpoints', 'fphuber', 'fptukey', 'ftukey', 'geohuber', 'geometric', 'geotukey', 'voss' *参数4:轮廓端点之间的最大距离被视为“闭合” *参数9:Row椭圆中心的行坐标 *参数10:Column椭圆中心的列坐标 *参数11:Phi主轴方向 *参数12:Radius1大半轴的长度 *参数13:Radius2较小半轴的长度 *参数14:StartPhi起点的角度 *参数15:EndPhi终点的角度 *参数16:PointOrder沿边界的点顺序( 'negative'负序, 'positive'正序) *注意:拟合时参数1只能包含一条xld gen_ellipse_contour_xld (ContEllipse, Row, Column, Phi, Radius1, Radius2, StartPhi, EndPhi, 'positive', 1.5) *创建椭圆弧的XLD轮廓 *参数1:生成的轮廓 *参数2:Row椭圆中心的行坐标 *参数3:Column椭圆中心的列坐标 *参数4:Phi主轴方向 *参数5:Radius1大半轴的长度 *参数6:Radius2较小半轴的长度 *参数7:StartPhi起点的角度 *参数8:EndPhi终点的角度 *参数9:PointOrder沿边界的点顺序( 'negative'负序, 'positive'正序) *参数10:分辨率:相邻轮廓点之间的最大距离 get_image_size (GrayImage, Width, Height) dev_open_window(10,10,Width, Height,'black',WindowHandle) dev_display(SelectedXLD1) dev_open_window(10,10,Width, Height,'black',WindowHandle1) dev_display(ContEllipse)
在QtCreator中
HObject ho_Image, ho_GrayImage, ho_Edges, ho_SelectedXLD; HObject ho_ContoursSplit, ho_SelectedXLD1, ho_ContEllipse; HTuple hv_Row, hv_Column, hv_Phi, hv_Radius1; HTuple hv_Radius2, hv_StartPhi, hv_EndPhi, hv_PointOrder; HTuple hv_Width, hv_Height, hv_WindowHandle, hv_WindowHandle1;
ReadImage(&ho_Image, "D:/bb/tu/8.jpg"); Rgb1ToGray(ho_Image, &ho_GrayImage); EdgesSubPix(ho_GrayImage, &ho_Edges, "canny", 1, 5, 10); //亚像素边缘 SelectShapeXld(ho_Edges, &ho_SelectedXLD, "contlength", "and", 367, 369); SegmentContoursXld(ho_SelectedXLD, &ho_ContoursSplit, "lines_ellipses", 5, 4, 2); SelectShapeXld(ho_ContoursSplit, &ho_SelectedXLD1, "contlength", "and", 72, 77); FitEllipseContourXld(ho_SelectedXLD1, "fitzgibbon", -1, 0, 0, 200, 3, 2, &hv_Row, &hv_Column, &hv_Phi, &hv_Radius1, &hv_Radius2, &hv_StartPhi, &hv_EndPhi, &hv_PointOrder); //对XLD轮廓做近似椭圆计算--拟合椭圆--获得椭圆数据 //参数1:输入xld轮廓 //参数2:椭圆拟合算法 // 'fhuber', 'fitzgibbon', 'focpoints', 'fphuber', 'fptukey', 'ftukey', 'geohuber', 'geometric', 'geotukey', 'voss' //参数4:轮廓端点之间的最大距离被视为“闭合” //参数9:Row椭圆中心的行坐标 //参数10:Column椭圆中心的列坐标 //参数11:Phi主轴方向 //参数12:Radius1大半轴的长度 //参数13:Radius2较小半轴的长度 //参数14:StartPhi起点的角度 //参数15:EndPhi终点的角度 //参数16:PointOrder沿边界的点顺序( 'negative'负序, 'positive'正序) //注意:拟合时参数1只能包含一条xld GenEllipseContourXld(&ho_ContEllipse, hv_Row, hv_Column, hv_Phi, hv_Radius1, hv_Radius2, hv_StartPhi, hv_EndPhi, "positive", 1.5); //创建椭圆弧的XLD轮廓 //参数1:生成的轮廓 //参数2:Row椭圆中心的行坐标 //参数3:Column椭圆中心的列坐标 //参数4:Phi主轴方向 //参数5:Radius1大半轴的长度 //参数6:Radius2较小半轴的长度 //参数7:StartPhi起点的角度 //参数8:EndPhi终点的角度 //参数9:PointOrder沿边界的点顺序( 'negative'负序, 'positive'正序) //参数10:分辨率:相邻轮廓点之间的最大距离 GetImageSize(ho_GrayImage, &hv_Width, &hv_Height); SetWindowAttr("background_color","black"); OpenWindow(10,10,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle); HDevWindowStack::Push(hv_WindowHandle); if (HDevWindowStack::IsOpen()) DispObj(ho_SelectedXLD1, HDevWindowStack::GetActive()); SetWindowAttr("background_color","black"); OpenWindow(10,10,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle1); HDevWindowStack::Push(hv_WindowHandle1); if (HDevWindowStack::IsOpen()) DispObj(ho_ContEllipse, HDevWindowStack::GetActive());
标签:10,XLD,xld,hv,椭圆,参数,ho,gen 来源: https://www.cnblogs.com/liming19680104/p/16025456.html