HALCON示例程序count_fish_sticks.hdev鱼棒完整性检测

HALCON示例程序count_fish_sticks.hdev鱼棒完整性检测

示例程序源码(加注释)

  • 关于显示类函数解释
    dev_update_off ()
    dev_close_window ()
    read_image (Image, ‘food/fish_stick_package_01’)
    get_image_size (Image, Width, Height)
    dev_open_window (0, 0, Width * .9, Height * .9, ‘black’, WindowHandle)
    set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
    dev_set_draw (‘margin’)
    dev_open_window (0, Width * .9 + 12, 420, 150, ‘black’, GraphicsWindow)
    set_display_font (GraphicsWindow, 16, ‘mono’, ‘true’, ‘false’)
    dev_set_color (‘yellow’)
  • 读入图片
    NumImages := 6
    for Index := 1 to NumImages by 1
    read_image (Image, ‘food/fish_stick_package_’ + Index$‘02’)
    • 二值化
      threshold (Image, Region, 100, 255)
    • 使用圆形元素进行闭运算
      closing_circle (Region, RegionClosing, 5)
    • 填充孔洞
      fill_up (RegionClosing, RegionFillUp)
    • 求取区域不想交部分
      difference (RegionFillUp, RegionClosing, RegionDifference)
    • 填充孔洞
      fill_up (RegionDifference, RegionFillUp1)
    • 使用圆形元素进行闭运算
      closing_circle (RegionFillUp1, RegionClosing1, 10)
    • 求取区域的可旋转的最小外接矩形
      smallest_rectangle2 (RegionClosing1, Row, Column, Phi, Length1, Length2)
      MeasureLength1 := Length1 - 5
    • 生成一个可旋转矩形框
      gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, 80)
    • gen_measure_rectangle2提取垂直于矩形的直边。
    • gen_measure_rectangle2(::行坐标,列坐标,角度,矩形长度/2,矩形宽度/2,测量宽度,测量高度,算法:测量句柄)
      gen_measure_rectangle2 (Row, Column, Phi, MeasureLength1, 60, Width, Height, ‘nearest_neighbor’, MeasureHandle)
    • measure_projection - 提取垂直于矩形或环形弧的一维灰度值轮廓。
    • measure_projection(图片:: 测量句柄:灰度值)
      measure_projection (Image, MeasureHandle, GrayValues)
    • 关闭测量句柄
      close_measure (MeasureHandle)
    • create_funct_1d_array - 从一系列y值创建一个函数。
    • create_funct_1d_array(::: Y值:函数)
      create_funct_1d_array (GrayValues, Function)
    • local_min_max_funct_1d - 计算函数的局部最小点和最大点。
    • local_min_max_funct_1d(::功能,模式,插值:最小,最大)
      local_min_max_funct_1d (Function, ‘plateaus_center’, ‘true’, Minima, Maxima)
    • get_y_value_funct_1d - 返回指定X位置的函数Y的值。
    • get_y_value_funct_1d(::函数,X位置,边界处理方法:Y的值)
      get_y_value_funct_1d (Function, Minima, ‘mirror’, YValues)
    • 这句话的所有关于数组操作的算子解释贴子,这句话就是筛选局部最小值低于50的点。
      SelectedMinima := subset(Minima,find(sgn(YValues - 50),-1))
      Num := |SelectedMinima| + 1
      StickEdges := [-5,SelectedMinima,2 * MeasureLength1 + 5]
      StickWidth := StickEdges[1:Num] - StickEdges[0:Num - 1]
    • 计算每个鱼块的中心点与边界,并画X
      BorderX := Column + cos(Phi) * (MeasureLength1 * ((StickEdges - MeasureLength1) / MeasureLength1))
      BorderY := Row - sin(Phi) * (MeasureLength1 * ((StickEdges - MeasureLength1) / MeasureLength1))
      CenterX := (BorderX[1:Num] + BorderX[0:Num - 1]) / 2
      CenterY := (BorderY[1:Num] + BorderY[0:Num - 1]) / 2
      gen_cross_contour_xld (BorderCross, BorderY, BorderX, 15, rad(45))
      gen_cross_contour_xld (CenterCross, CenterY, CenterX, 15, rad(45))
    • 筛选大于20小于48的鱼块
      IndexFish := find(sgn(StickWidth - 20),1)
      if (IndexFish != -1)
      NumFish := |IndexFish|
      gen_rectangle2 (FishRegions, subset(CenterY,IndexFish), subset(CenterX,IndexFish), gen_tuple_const(NumFish,Phi), subset(StickWidth,IndexFish) / 2, gen_tuple_const(NumFish,Length2) / 2)
      else
      NumFish := 0
      endif
      gen_empty_region (Flipped)
      IndexFlipped := find(sgn(StickWidth - 48),1)
      if (IndexFlipped != -1)
      NumFlipped := |IndexFlipped|
      gen_rectangle2 (Flipped, subset(CenterY,IndexFlipped), subset(CenterX,IndexFlipped), gen_tuple_const(NumFlipped,Phi), subset(StickWidth,IndexFlipped) / 2, gen_tuple_const(NumFlipped,Length2) / 2)
      else
      NumFlipped := 0
      endif
    • 显示结果
      dev_set_window (GraphicsWindow)
      dev_clear_window ()
    • plot_funct_1d - 此过程绘制表示坐标系中函数或曲线的元组。这个不是很常用。
      plot_funct_1d (GraphicsWindow, Function, [], [], ‘yellow’, ‘axes_color’, ‘none’)
      disp_message (GraphicsWindow, ‘Gray Profile’, ‘window’, 12, 12, ‘white’, ‘false’)
      dev_set_window (WindowHandle)
      dev_clear_window ()
      dev_display (Image)
      dev_set_color (‘yellow’)
      dev_set_line_width (1)
      dev_display (FishRegions)
      dev_display (BorderCross)
      dev_set_color (‘red’)
      dev_set_line_width (3)
      dev_display (Flipped)
      if (NumFish == 15 and NumFlipped == 0)
      String := ‘OK’
      Color := ‘green’
      else
      String := ‘Not OK’
      Color := ‘red’
      endif
      String[1] := ‘Number of fish sticks:’ + NumFish′3′if(NumFish!=15)Color:=[Color,′red′]elseColor:=[Color,′white′]endifif(NumFlipped!=0)String[2]:=′Flippedfishsticks:′+NumFlipped'3' if (NumFish != 15) Color := [Color,'red'] else Color := [Color,'white'] endif if (NumFlipped != 0) String[2] := 'Flipped fishsticks: ' + NumFlipped3if(NumFish!=15)Color:=[Color,red]elseColor:=[Color,white]endifif(NumFlipped!=0)String[2]:=Flippedfishsticks:+NumFlipped’3’
      Color := [Color,‘red’]
      endif
      disp_message (WindowHandle, String, ‘window’, 12, 12, Color, ‘false’)
      dev_set_color (Color[0])
      dev_display (Rectangle)
      if (Index < NumImages)
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endif
      endfor

处理思路

这个例子是主要讲解了二维测量的方法。使用的是gen_measure_rectangle2、measure_projection、create_funct_1d_array 、local_min_max_funct_1d、get_y_value_funct_1d完成的测量,当然后续会有更简单的直观的方法。

后记

大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255187.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于相机标定的问题答复网友

网友snow2012720 我刚开始学习计算机视觉的双目三维重建内容&#xff0c;感觉好多内容不懂&#xff0c;看到你的博文&#xff0c;了解到你对双目标定三维重建这些有深入的研究&#xff0c;您是过来人了&#xff0c;能否帮忙给我在学习标定匹配三维重建过程中给予指点&#xff…

转:ORACLE的JDBC连接方式:OCI和THIN

oracle的jdbc连接方式:oci和thin oci和thin是Oracle提供的两套Java访问Oracle数据库方式。 thin是一种瘦客户端的连接方式&#xff0c;即采用这种连接方式不需要安装oracle客户端,只要求classpath中包含jdbc驱动的jar包就行。thin就是纯粹用Java写的ORACLE数据库访问接口。oci是…

软工网络15个人阅读作业2——提问题

提出问题 快速通读教材《构建之法》&#xff0c;并参照提问模板&#xff0c;提出5个问题。 问题一&#xff1a; p83有一段话&#xff1a; 两人在一起合作&#xff0c;自然会出现不同意见&#xff0c;每个人都有自己的想法&#xff0c;在两个人平等合作的情况下&#xff0c;不存…

HALCON示例程序count_pellets.hdev分割豆子,基本形态学的使用

HALCON示例程序count_pellets.hdev分割豆子&#xff0c;基本形态学的使用 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_update_off () read_image (Image, ‘pellets’) dev_close_window () get_image_size (Image, Width, Height) dev_open_window…

绝对路径VS相对路径

绝对路径&#xff1a;不必赘述&#xff0c;就是从盘符开始写直到找到你所需要的文件为止&#xff0c;把所有的目录写完整即可。但是在做网站的时候绝对不推荐用绝对路径&#xff0c;因为不可能服务器中的路径和在做设计时候所用的电脑的路径一致&#xff0c;也不可能说在服务器…

四、极大似然参数估计

四、极大似然参数估计 此篇博文&#xff0c;玉米将和大家分享一下“张氏标定”除几何推导外的另外一大精髓&#xff1a;参数估计。 张教授在大作“A Flexible New Technique for Camera Calibration”中的原话如下&#xff1a;” The above solution is obtained through minim…

xtrabackup安装使用

2019独角兽企业重金招聘Python工程师标准>>> 【MySQL】xtrabackup安装使用 拾荒者charley 关注 2018.03.19 09:19 字数 186 阅读 17评论 0喜欢 0 前言&#xff1a;说到MySQL备份&#xff0c;主要采用的方法无非就是mysqldump/mysqldumper以及我们今天要说的热备利器…

HALCON示例程序crystal.hdev通过局部阈值处理和区域处理提取六角形晶体

HALCON示例程序crystal.hdev通过局部阈值处理和区域处理提取六角形晶体 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_close_window () dev_update_window (‘off’) read_image (Image, ‘crystal’) get_image_size (Image, Width, Height) dev_ope…

2017/3/10 morning

转载于:https://www.cnblogs.com/bgd140206325/p/6529497.html

六、张正友标定法小结

六、张正友标定法小结 这一博文&#xff0c;是玉米后补上的。因为觉得前面用了三篇博文来描述张氏标定法&#xff0c;略显散乱。在这里总结一下&#xff0c;使条理清晰一点。另外关于张氏标定所得参数也还有两点需要澄清。下面这个总结&#xff0c;其实也是在“A Flexible New …

SqlServer图形数据库初体验

SQL Server2017新增了一个新功能叫做图形数据库。图形指的拓扑图形&#xff0c;是一些Node表和Edge表的合集&#xff0c;Node对应关系数据库中的实体&#xff0c;比如一个人、一个岗位等&#xff0c;Edge表指示Node之前的关系&#xff0c;比如张三在经理岗位。图形表比较适合用…

HALCON示例程序dem_trees.hdev提取树

HALCON示例程序dem_trees.hdev提取树 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_close_window () read_image (Mreut, ‘mreut_y’) read_image (MreutDem, ‘mreut_dgm_2.0’) get_image_size (Mreut, Width, Height) dev_open_window (0, 0, Wid…

Oracle CASE WHEN 用法介绍

1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END --Case搜索函数 CASEWHEN sex 1 THEN 男 WHEN sex 2 THEN 女 ELSE 其他 END 2. CASE WHEN 在语句中不同位置的用法 2.1 SELECT CASE WHEN 用法 SELECT grad…

Golang 处理 Json(二):解码

golang 编码 json 还比较简单&#xff0c;而解析 json 则非常蛋疼。不像 PHP 一句 json_decode() 就能搞定。之前项目开发中&#xff0c;为了兼容不同客户端的需求&#xff0c;请求的 content-type 可以是 json&#xff0c;也可以是 www-x-urlencode。然后某天前端希望某个后端…

五、畸变矫正—让世界不在扭曲

五、畸变矫正—让世界不在扭曲 这篇博文所要讲述的内容&#xff0c;是标定的主要用途之一&#xff1a;矫正摄像机的畸变。对于图像畸变矫正的方法&#xff0c;张正友教授也在其大作“A Flexible New Technique forCamera Calibration”中给出。 玉米在这里先为大家介绍一下&…

第二阶段个人冲刺08

昨天做了什么&#xff1f; 解决新建项目时会遇到“Your android sdk is out of date or is missing templates”的问题&#xff0c;&#xff0c;实现学生交流区&#xff0c;只有学生和管理员有权查看&#xff0c;教师无权查看的功能 今天要做什么&#xff1f; 实现学生交流区&a…

HALCON示例程序distance_transform.hdev通过distance_transform检测线的缺陷

HALCON示例程序distance_transform.hdev通过distance_transform检测线的缺陷 示例程序源码&#xff08;加注释&#xff09; 关于显示类函数解释 dev_close_window () dev_open_window (0, 0, 400, 400, ‘black’, WindowHandle)通过一系列的坐标点生成多边形像素轮廓 gen_re…

java面试-Java并发编程(二)——重排序

当我们写一个单线程程序时&#xff0c;总以为计算机会一行行地运行代码&#xff0c;然而事实并非如此。 什么是重排序&#xff1f; 重排序指的是编译器、处理器在不改变程序执行结果的前提下&#xff0c;重新排列指令的执行顺序&#xff0c;以达到最佳的运行效率。 重排序分类 …

《MySQL必知必会》[01] 基本查询

《MySQL必知必会》&#xff08;点击查看详情&#xff09;1、写在前面的话这本书是一本MySQL的经典入门书籍&#xff0c;小小的一本&#xff0c;也受到众多网友推荐。之前自己学习的时候是啃的清华大学出版社的计算机系列教材《数据库系统概论》&#xff0c;基础也算是半罐水&am…

(七)立体标定与立体校正 【计算机视觉学习笔记--双目视觉几何框架系列】

七、立体标定与立体校正 这篇博文中&#xff0c;让玉米和大家一起了解一下&#xff0c;张氏标定是怎样过渡到立体标定的&#xff1f;在这里主要以双目立体视觉进行分析。对于双目立体视觉&#xff0c;我们有两个摄像头。它们就像人的一双眼睛一样&#xff0c;从不同的方向看世界…