halcon-fit_line_contour_xld拟合直线
在HDevelop中
dev_close_window () read_image (Image, 'D:/bb/tu/7.jpg') rgb1_to_gray (Image, GrayImage) edges_sub_pix (GrayImage, Edges, 'canny', 1, 5, 10) segment_contours_xld (Edges, ContoursSplit, 'lines_circles', 5, 4, 2) *分割xld轮廓 select_shape_xld (ContoursSplit, SelectedXLD, 'contlength', 'and', 25, 26) get_contour_global_attrib_xld (SelectedXLD, 'cont_approx', Attrib) gen_empty_obj (Lines) if(Attrib=-1) *判断xld是否适合拟合成直线 fit_line_contour_xld (SelectedXLD, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist) *对XLD轮廓做近似直线计算--拟合直线--获得直线数据 *参数1:输入轮廓 *参数2:形成线的算法 * regression:回归,标准的最小二乘法拟合 * huber:加权的最小二乘法拟合,异常值的影响被减小基于Huber方法 * tukey:加权的最小二乘法拟合,异常值的影响被减小基于Tukey方法(系统推荐方法) * gauss:加权的最小二乘法拟合,异常值的影响被减小基于最逼近线上的所有其轮廓点的平均值和距离标准方差 * drop:加权的最小二乘法拟合,异常值的影响被消除 *参数7:RowBegin返回线段起点的行坐标 *参数8:ColBegin返回线段起点的列坐标 *参数9:RowEnd返回线段终点的行坐标 *参数10:ColEnd返回线段终点的列坐标 gen_contour_polygon_xld (Contour, [RowBegin,RowEnd], [ColBegin,ColEnd]) *根据拟合后得到的数据创建直线xld endif get_image_size (GrayImage, Width, Height) dev_open_window(10,10,Width, Height,'black',WindowHandle) dev_display(SelectedXLD) dev_open_window(10,10,Width, Height,'black',WindowHandle1) dev_display(Contour)
在QtCreator中
HObject ho_Image, ho_GrayImage, ho_Edges, ho_ContoursSplit;
HObject ho_SelectedXLD, ho_Lines, ho_Contour;
HTuple hv_Attrib, hv_RowBegin, hv_ColBegin, hv_RowEnd;
HTuple hv_ColEnd, hv_Nr, hv_Nc, hv_Dist, hv_Width, hv_Height;
HTuple hv_WindowHandle, hv_WindowHandle1;
ReadImage(&ho_Image, "D:/bb/tu/7.jpg"); Rgb1ToGray(ho_Image, &ho_GrayImage); EdgesSubPix(ho_GrayImage, &ho_Edges, "canny", 1, 5, 10); SegmentContoursXld(ho_Edges, &ho_ContoursSplit, "lines_circles", 5, 4, 2); //分割xld轮廓 SelectShapeXld(ho_ContoursSplit, &ho_SelectedXLD, "contlength", "and", 25, 26); GetContourGlobalAttribXld(ho_SelectedXLD, "cont_approx", &hv_Attrib); GenEmptyObj(&ho_Lines); if (0 != (hv_Attrib==-1)) { //判断xld是否适合拟合成直线 FitLineContourXld(ho_SelectedXLD, "tukey", -1, 0, 5, 2, &hv_RowBegin, &hv_ColBegin, &hv_RowEnd, &hv_ColEnd, &hv_Nr, &hv_Nc, &hv_Dist); //对XLD轮廓做近似直线计算--拟合直线--获得直线数据 //参数1:输入轮廓 //参数2:形成线的算法 // regression:回归,标准的最小二乘法拟合 // huber:加权的最小二乘法拟合,异常值的影响被减小基于Huber方法 // tukey:加权的最小二乘法拟合,异常值的影响被减小基于Tukey方法(系统推荐方法) // gauss:加权的最小二乘法拟合,异常值的影响被减小基于最逼近线上的所有其轮廓点的平均值和距离标准方差 // drop:加权的最小二乘法拟合,异常值的影响被消除 //参数7:RowBegin返回线段起点的行坐标 //参数8:ColBegin返回线段起点的列坐标 //参数9:RowEnd返回线段终点的行坐标 //参数10:ColEnd返回线段终点的列坐标 GenContourPolygonXld(&ho_Contour, hv_RowBegin.TupleConcat(hv_RowEnd), hv_ColBegin.TupleConcat(hv_ColEnd)); //根据拟合后得到的数据创建直线xld } 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_SelectedXLD, 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_Contour, HDevWindowStack::GetActive());
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2020-03-15 python-qrcode模块生成二维码
2019-03-15 python随机数random模块
2019-03-15 随机数random
2019-03-15 时间戳time