当前位置: 首页 > news >正文

halcon 检测直线

 图像:

代码:

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*加载图像
read_image (Image,'G:/halcon练习用/MemoryStick.jpg')
get_image_size (Image, Width, Height)
*界面操作得到测量区域,转到视野上画线
draw_line (WindowHandle, Row1, Column1, Row2, Column2)
shapePararm:=[Row1,Column1,Row2,Column2]
*创建直线模型
create_metrology_model (MetrologyHandle)
*设置直线模型图像大小,即需要被检测的图像大小
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*添加线模型通用测量对象  sharp参数设置为line    Index:输出创建测量对象的索引值
add_metrology_object_generic (MetrologyHandle, 'line', shapePararm, 200, 10, 1, 10, [], [], Index) 
*找线方式,暗 / 亮(positive)或亮 / 暗(negative)边缘,'uniform' 表示同时检测并分别拟合
set_metrology_object_param (MetrologyHandle, 'all','measure_transition', 'all')
*设置卡尺数量
set_metrology_object_param (MetrologyHandle, 'all', 'num_measures', 20)
*拟合数,每个计量对象最多拟合的有效实例数,达到后停止拟合
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 6)
*高斯平滑系数,值越大边缘越清晰,越不容易找到边缘,值越小,干扰边缘越多
set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 2)
*测量双立方插入值,区别于bilinear双线性
set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bicubic')
*边缘振幅最小值,最小边缘幅度越大,要求找到的边缘越锐利(灰度变化明显),反而越不容易找到边缘
set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 20)
*取值 all,first,best,last
set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'all')
*判定有效拟合实例的最低分数(检测边缘数 / 最大测量区域数)
set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.4)*设置卡尺长,实际长2000*2
set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 2000)
*设置卡尺宽,实际宽10*2
set_metrology_object_param (MetrologyHandle, 'all', 'measure_length2', 10)
*开始找边缘
apply_metrology_model (Image, MetrologyHandle)
*获取模型的计量区域和边缘结果
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
*把所有点显示出来
gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)
*得到线的起点坐标并显示出来
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'all_param', Parameter)
*获模型计量对象的结果轮廓
get_metrology_object_result_contour (Contour, MetrologyHandle, 0, 'all', 1.5)select_obj(Contour, ObjectSelected1, 1)
select_obj(Contour, ObjectSelected2, 2)
select_obj(Contour, ObjectSelected3, 3)
*释放测量句柄,很重要否则导入C#代码运行没多久就会崩溃程序
clear_metrology_object (MetrologyHandle, 'all')

 运行效果:

调整参数可控制检测数量 :

num_instances控制检测的直线数量(例如设为2则最多返回2条最优直线)
min_score分数阈值(0~1),越高则直线质量要求越严格
measure_length1测量区域的长度(影响边缘点数量)
measure_sigma高斯平滑系数,越大抗噪性越强

图中后三个对象既是检测出的图像;

参考:Halcon尺寸测量之二维计量模型(create_metrology_model)_halcon设置卡尺个数-CSDN博客

http://www.lryc.cn/news/591829.html

相关文章:

  • OpenCV学习笔记二(色彩空间:RGB、HSV、Lab、mask)
  • DocsGPT:您的智能知识助手,解锁高效信息检索
  • 前端之HTML学习
  • 项目实战(18)-POE分离器
  • 渗透总结一
  • 手机兼容测试服务提供商对比分析:如何选择最合适的测试平台
  • 学习软件测试掌握什么基本知识?
  • 在VsCode上使用开发容器devcontainer
  • windows内核研究(驱动开发 第一个驱动程序和调试环境搭建)
  • VSCODE常规设置
  • 删除百度同步空间桌面图标
  • Elasticsearch+Logstash+Filebeat+Kibana部署【7.1.1版本】
  • 全桥LLC 分立电感变压器计算
  • Docker实战:使用Docker部署IT工具箱Team·IDE
  • vuex的理解以及应用
  • Spring中事务失效的情况深度分析
  • 深入理解 SemaphoreSlim 在.NET Core API 开发中的应用
  • ROS1/Linux——Launch文件使用
  • 三、CV_VGGnet
  • 从零开始学 Linux 系统安全:基础防护与实战应用
  • git merge 和 git rebase 的区别
  • Python获取网页乱码问题终极解决方案 | Python爬虫编码处理指南
  • C++中,不能声明为虚函数的函数类型
  • Redis红锁中的看门狗机制
  • FreeRTOS—中断管理
  • Pytorch深度学习框架实战教程03:Tensor 的创建、属性、操作与转换详解
  • 网络安全基础操作2
  • 【初始Java】
  • C语言---动态内存管理
  • mingw 编译 assimp v6.0.2 解决编译报错