ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

halcon-orientation_region返回区域的方向

2022-04-27 14:00:57  阅读:220  来源: 互联网

标签:HDevWindowStack orientation Clip region Selected hv halcon 参数 ho


7.png

 

在HDevelop中

dev_update_off()
dev_close_window ()
read_image (Clip, 'D:/bb/tu/7.png')
get_image_size (Clip, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowID)
dev_display (Clip)

*设置窗口字体显示,字体大小,字体样式,粗体,斜体
set_display_font (WindowID, 14, 'mono', 'true', 'false')

disp_continue_message (WindowID, 'black', 'true')
*在屏幕的右下角显示“Press Run  (F5) to  continue”
*注意:程序不会停止,一般下一句就是stop()
*参数1:窗口句柄
*参数3:如果设置为'true',则文本将写在白框内,这在不规则背景下很有用
*参数2:定义文本颜色
*      可选值: ‘black’, ‘blue’, ‘yellow’, ‘red’, ‘green’, ‘cyan’, ‘magenta’, 
*              ‘forest green’, ‘lime green’, ‘coral’, ‘slate blue’

stop()
*暂停

*二值化操作
binary_threshold (Clip, Dark, 'max_separability', 'dark', UsedThreshold)

*将区域进行连通处理
connection (Dark, Single)

*过滤出面积大小在【5000, 10000】范围里的区域
select_shape (Single, Selected, 'area', 'and', 1600, 20000)

dev_open_window (50, 50, Width, Height, 'black', WindowID1)
dev_display (Selected)


orientation_region (Selected, Phi)
*返回区域的方向
*参数1:区域
*参数2:与x轴的夹角,其实就是elliptic_axis算子中的Phi

*获取过滤后区域的面积,中心的行坐标,列坐标
area_center (Selected, Area, Row, Column)

*设置输出对象的线宽为3
dev_set_line_width (3)

*设置区域的填充方式
dev_set_draw ('margin')
Length := 80

*设置输出对象的颜色为蓝色
dev_set_color ('blue')


disp_arrow (WindowID1, Row, Column, Row - Length * sin(Phi), Column + Length * cos(Phi), 2)
*在窗口显示箭头
*参数1:窗口句柄
*参数2和参数3:起始行坐标, 起始列坐标
*参数4和参数5:终止行坐标, 终止列坐标
*参数6:箭头宽度

 

 

在Qt Creator中

  HObject  ho_Clip, ho_Dark, ho_Single, ho_Selected;
  HTuple  hv_Width, hv_Height, hv_WindowID, hv_UsedThreshold;
  HTuple  hv_WindowID1, hv_Phi, hv_Area, hv_Row, hv_Column;
  HTuple  hv_Length;
  ReadImage(&ho_Clip, "D:/bb/tu/7.png");
  GetImageSize(ho_Clip, &hv_Width, &hv_Height);
  SetWindowAttr("background_color","black");
  OpenWindow(0,0,hv_Width,hv_Height,0,"visible","",&hv_WindowID);
  HDevWindowStack::Push(hv_WindowID);
  if (HDevWindowStack::IsOpen())
    DispObj(ho_Clip, HDevWindowStack::GetActive());

  //设置窗口字体显示,字体大小,字体样式,粗体,斜体
  set_display_font(hv_WindowID, 14, "mono", "true", "false");

  disp_continue_message(hv_WindowID, "black", "true");
  //在屏幕的右下角显示“Press Run  (F5) to  continue”
  //注意:程序不会停止,一般下一句就是stop()
  //参数1:窗口句柄
  //参数3:如果设置为'true',则文本将写在白框内,这在不规则背景下很有用
  //参数2:定义文本颜色
  //     可选值: ‘black’, ‘blue’, ‘yellow’, ‘red’, ‘green’, ‘cyan’, ‘magenta’,
  //             ‘forest green’, ‘lime green’, ‘coral’, ‘slate blue’

  // stop(...); only in hdevelop
  //暂停

  //二值化操作
  BinaryThreshold(ho_Clip, &ho_Dark, "max_separability", "dark", &hv_UsedThreshold);

  //将区域进行连通处理
  Connection(ho_Dark, &ho_Single);

  //过滤出面积大小在【5000, 10000】范围里的区域
  SelectShape(ho_Single, &ho_Selected, "area", "and", 1600, 20000);

  SetWindowAttr("background_color","black");
  OpenWindow(50,50,hv_Width,hv_Height,0,"visible","",&hv_WindowID1);
  HDevWindowStack::Push(hv_WindowID1);
  if (HDevWindowStack::IsOpen())
    DispObj(ho_Selected, HDevWindowStack::GetActive());


  OrientationRegion(ho_Selected, &hv_Phi);
  //返回区域的方向
  //参数1:区域
  //参数2:与x轴的夹角,其实就是elliptic_axis算子中的Phi

  //获取过滤后区域的面积,中心的行坐标,列坐标
  AreaCenter(ho_Selected, &hv_Area, &hv_Row, &hv_Column);

  //设置输出对象的线宽为3
  if (HDevWindowStack::IsOpen())
    SetLineWidth(HDevWindowStack::GetActive(),3);

  //设置区域的填充方式
  if (HDevWindowStack::IsOpen())
    SetDraw(HDevWindowStack::GetActive(),"margin");
  hv_Length = 80;

  //设置输出对象的颜色为蓝色
  if (HDevWindowStack::IsOpen())
    SetColor(HDevWindowStack::GetActive(),"blue");


  DispArrow(hv_WindowID1, hv_Row, hv_Column, hv_Row-(hv_Length*(hv_Phi.TupleSin())), 
      hv_Column+(hv_Length*(hv_Phi.TupleCos())), 2);
  //在窗口显示箭头
  //参数1:窗口句柄
  //参数2和参数3:起始行坐标, 起始列坐标
  //参数4和参数5:终止行坐标, 终止列坐标
  //参数6:箭头宽度

 

 

 

 

 

 

 

 

标签:HDevWindowStack,orientation,Clip,region,Selected,hv,halcon,参数,ho
来源: https://www.cnblogs.com/liming19680104/p/16198625.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有