halcon-fit_rectangle2_contour_xld对轮廓进行矩形拟合

 

 

在HDevelop中

read_image (Image, 'D:/bb/tu/6.png')
get_image_size (Image, Width, Height)
rgb1_to_gray(Image,Image1)

edges_sub_pix (Image1, Edges, 'canny', 1, 5, 10)
*亚像素边缘

fit_rectangle2_contour_xld (Edges, 'regression', -1, 0, 0, 3, 2, Row, Column, Phi, Length1, Length2, PointOrder)
*对轮廓进行矩形拟合--得到矩形数据
*参数1:输入轮廓
*参数2:用于拟合矩形的算法
*      'huber', 'regression', 'tukey'
*参数3:用于计算的轮廓点的最大数量
*      所有点:-1
*参数4:轮廓端点之间的最大距离被视为“闭合”
*参数5:拟合要忽略的轮廓起点和终点的点数
*参数6:最大迭代次数
*参数7:
*参数8:矩形中心的行坐标
*参数9:矩形中心的列坐标
*参数10:矩形主轴的方向(弧度)
*参数11:矩形的第一个半径(长度的一半)
*参数12:矩形的第二个半径(半宽度)
*参数13:PointOrder沿边界的点顺序( 'negative'负序, 'positive'正序)

gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2)

dev_open_window(10,10,Width, Height,'black',WindowHandle)
dev_display (Rectangle)
dev_open_window(10,100,Width, Height,'black',WindowHandle1)
dev_display (Image)

 

 

在Qt Creator中

  HObject  ho_Image, ho_Image1, ho_Edges, ho_Rectangle;
  HTuple  hv_Width, hv_Height, hv_Row, hv_Column;
  HTuple  hv_Phi, hv_Length1, hv_Length2, hv_PointOrder, hv_WindowHandle;
  HTuple  hv_WindowHandle1;

 

  ReadImage(&ho_Image, "D:/bb/tu/6.png");
  GetImageSize(ho_Image, &hv_Width, &hv_Height);
  Rgb1ToGray(ho_Image, &ho_Image1);

  EdgesSubPix(ho_Image1, &ho_Edges, "canny", 1, 5, 10);
  //亚像素边缘

  FitRectangle2ContourXld(ho_Edges, "regression", -1, 0, 0, 3, 2, &hv_Row, &hv_Column, 
      &hv_Phi, &hv_Length1, &hv_Length2, &hv_PointOrder);
  //对轮廓进行矩形拟合--得到矩形数据
  //参数1:输入轮廓
  //参数2:用于拟合矩形的算法
  //     'huber', 'regression', 'tukey'
  //参数3:用于计算的轮廓点的最大数量
  //     所有点:-1
  //参数4:轮廓端点之间的最大距离被视为“闭合”
  //参数5:拟合要忽略的轮廓起点和终点的点数
  //参数6:最大迭代次数
  //参数7:
  //参数8:矩形中心的行坐标
  //参数9:矩形中心的列坐标
  //参数10:矩形主轴的方向(弧度)
  //参数11:矩形的第一个半径(长度的一半)
  //参数12:矩形的第二个半径(半宽度)
  //参数13:PointOrder沿边界的点顺序( 'negative'负序, 'positive'正序)

  GenRectangle2ContourXld(&ho_Rectangle, hv_Row, hv_Column, hv_Phi, hv_Length1, hv_Length2);

  SetWindowAttr("background_color","black");
  OpenWindow(10,10,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle);
  HDevWindowStack::Push(hv_WindowHandle);
  if (HDevWindowStack::IsOpen())
    DispObj(ho_Rectangle, HDevWindowStack::GetActive());
  SetWindowAttr("background_color","black");
  OpenWindow(10,100,hv_Width,hv_Height,0,"visible","",&hv_WindowHandle1);
  HDevWindowStack::Push(hv_WindowHandle1);
  if (HDevWindowStack::IsOpen())
    DispObj(ho_Image, HDevWindowStack::GetActive());

 

 

 

posted @ 2022-05-01 22:43  天子骄龙  阅读(2488)  评论(0)    收藏  举报