在图形窗口中画坐标系

  • 1. 看一个案例
  • 2. 具体要求
  • 3. 解决方案和效果
  • 4. 抓边工具方法
  • 5. Blob差分方法
  • 6. 两种方法的不同
  • 7. 资源下载

1. 看一个案例

  • 下图是电池UV点胶和热熔胶。
  • 想测量胶水的宽度,然后将宽度以曲线的形式显示在窗口中。

2. 具体要求

  • 只需关注W1、W2的技术要求

3. 解决方案和效果

  • 首先使用blob分析将UV胶区域分割出来,然后抠图;
  • 然后使用抓边工具/或Blob差分方法,测量胶水的宽度;
  • 最后在窗口中画出坐标系,显示宽度变化曲线

4. 抓边工具方法

dev_update_off ()
dev_get_window (WindowHandle)
dev_set_line_width (2)* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index])*通过Blob分析确定UV胶的大概位置threshold (Image, Regions1, 240, 255)erosion_rectangle1 (Regions1, RegionErosion, 11, 3)connection (RegionErosion, ConnectedRegions)   select_shape (ConnectedRegions, SelectedRegions, ['area','row'], 'and', [31306,1676.7], [95838.7,2000])smallest_rectangle2 (SelectedRegions, Row, Column, Phi, Length1, Length2)LineRow1:=RowLineCol1:=Column-Length1LineRow2:=RowLineCol2:=Column+Length1*===================Gap=======================* 1. 创建ROI draw_rake函数Elements:=200DetectHeight:=50DetectWidth:=5
*     draw_rake (Regions, WindowHandle, Elements, DetectHeight, DetectWidth, Row1, Column1, Row2, Column2)* 2. 边缘测量 rake函数Sigma:=3Threshold:=5Transition:='negative'Select:='all'dev_set_color ('white')rake (Image, Regions, Elements, DetectHeight, DetectWidth, Sigma, Threshold,\Transition, Select, LineRow1, LineCol1, LineRow2, LineCol2, ResultRows1, ResultColumns1)* 3. 拟合直线 pts_to_best_line函数
*     ActiveNum:=5
*     pts_to_best_line (Line1, ResultRow, ResultColumn, ActiveNum, R1, C1, R2, C2)Transition:='positive'rake (Image, Regions, Elements, DetectHeight, DetectWidth, Sigma, Threshold, \Transition, Select, LineRow1, LineCol1, LineRow2, LineCol2, ResultRows2, ResultColumns2)*     pts_to_best_line (Line2, ResultRow, ResultColumn, ActiveNum, R3, C3, R4, C4)* 计算点对之间的距离distance_pp (ResultRows1, ResultColumns1, ResultRows2, ResultColumns2, Distances)gen_contour_polygon_xld (Contour1, ResultRows1, ResultColumns1)gen_contour_polygon_xld (Contour2, ResultRows2, ResultColumns2)* 显示   dev_set_color ('blue')dev_display (Image)dev_display (Contour1)dev_display (Contour2)*标准线所在行数列数*像素与mm的换算关系 1mm = PMM pixelPMM:=100ScaleR:=15offsetRow:=200*不设置基准线,只保留上下限mmStdA:=0.6mmUpA:=0.3mmLowA:=-0.2mmStdB:=0.512mmUpB:=0.25mmLowB:=-0.122mmAvoid:=3  //避让长度mmAllLength:=285 //全长mmStartA:=100mmEndA:=mmStartA+mmAvoidmmStartB:=mmStartA+mmAvoid   mmEndB:=mmStartA+mmAllLengthpixStartACol:=LineCol1 pixStartBCol:=LineCol1 + mmAvoid*PMMpixEndACol:=pixStartBColpixEndBCol:=LineCol2pixStdARow:=offsetRow + mmStdA*PMM*ScaleRpixStdBRow:=offsetRow + (2*mmStdA-mmStdB)*PMM*ScaleRpixUpARow:=pixStdARow-mmUpA*PMM*ScaleRpixLowARow:=pixStdARow-mmLowA*PMM*ScaleRpixUpBRow:=pixStdBRow-mmUpB*PMM*ScaleRpixLowBRow:=pixStdBRow-mmLowB*PMM*ScaleR*gen_contour_polygon_xld (StdLA, [pixStdARow,pixStdARow], [pixStartACol,pixEndACol])*gen_contour_polygon_xld (StdLB, [pixStdBRow,pixStdBRow], [pixStartBCol,pixEndBCol])*A区上下限gen_contour_polygon_xld (UpLA, [pixUpARow,pixUpARow], [pixStartACol,pixEndACol])gen_contour_polygon_xld (LowLA, [pixLowARow,pixLowARow], [pixStartACol,pixEndACol])*B区上下限gen_contour_polygon_xld (UpLB, [pixUpBRow,pixUpBRow], [pixStartBCol,pixEndBCol])gen_contour_polygon_xld (LowLB, [pixLowBRow,pixLowBRow], [pixStartBCol,pixEndBCol])*Y轴gen_arrow_contour_xld (ArrowY, pixLowBRow+200, pixStartACol, pixUpARow-200, pixStartACol, 50, 50)*实测线RealRow:=1400 - Distances*ScaleRgen_contour_polygon_xld (ContourReal, RealRow, ResultColumns1)dev_set_color ('white')dev_display (ArrowY)dev_set_color ('red')dev_display (UpLA)dev_display (LowLA)dev_display (UpLB)dev_display (LowLB)dev_set_color ('green')dev_display (ContourReal)stop()
endfor
dev_update_on ()

5. Blob差分方法

dev_update_off ()
dev_get_window (WindowHandle)
dev_set_line_width (2)* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1read_image (Image, ImageFiles[Index])*通过Blob分析确定UV胶的大概位置   threshold (Image, Regions1, 240, 255)erosion_rectangle1 (Regions1, RegionErosion, 11, 3)connection (RegionErosion, ConnectedRegions)   select_shape (ConnectedRegions, SelectedRegions, ['area','row'], 'and', [31306,1676.7], [95838.7,2000])smallest_rectangle2 (SelectedRegions, Row, Column, Phi, Length1, Length2)LineRow1:=RowLineCol1:=Column-Length1LineRow2:=RowLineCol2:=Column+Length1*===================宽度=======================  smallest_rectangle1 (SelectedRegions, Row1, Column11, Row2, Column21)gen_rectangle1 (Rectangle, Row1, Column11, Row2, Column21)get_region_contour (SelectedRegions, Rows, Columns)gen_region_points (SelectedRegions, Rows, Columns)//clip_region (WeldBoundary, Boundaries, 0, 2, 511, 509)smallest_rectangle1 (SelectedRegions, UpperRow, Column1, LowerRow, Column2)Distances := []dev_set_color ('red')dev_update_var ('off')dev_update_time ('off')dev_update_pc ('off')for i := Column11+2 to Column21-2 by 1gen_region_line (ScanLine, UpperRow, i, LowerRow, i)dev_display (ScanLine)intersection (SelectedRegions, ScanLine, BoundaryPoints)get_region_points (BoundaryPoints, Rows, Columns)Distances := [Distances,abs(Rows[|Rows| - 1] - Rows[0])]endfordev_display (Image)* 坐标系向下偏移像素dev_set_color ('blue')OffsetY:=1200OffsetX:=LineCol1* X轴AxisXRow1:=OffsetYAxisXCol1:=OffsetXAxisXRow2:=OffsetYAxisXCol2:=AxisXCol1+2*Length1    gen_arrow_contour_xld (AxisX, AxisXRow1, AxisXCol1, AxisXRow2, AxisXCol2, 50, 50)* Y轴AxisYRow1:=AxisXRow1AxisYCol1:=OffsetXAxisYRow2:=AxisXRow1-OffsetYAxisYCol2:=OffsetX  gen_arrow_contour_xld (AxisY, AxisYRow1, AxisYCol1, AxisYRow2, AxisYCol2, 50, 50)*实测线PMM:=40Mul:=20RealRow:=AxisXRow1-Distances*Multuple_gen_sequence (Column1+2, Column2-2, 1, Sequence)gen_contour_polygon_xld (ContourReal, RealRow, Sequence)*上下限mmStdA:=0.6mmUpA:=0.6+0.3mmLowA:=0.6-0.2mmStdB:=0.512mmUpB:=0.512+0.25mmLowB:=0.512-0.122mmAvoid:=3  //避让长度mmAllLength:=285 //全长   mmStartA:=100mmEndA:=mmStartA+mmAvoidmmStartB:=mmStartA+mmAvoid   mmEndB:=mmStartA+mmAllLengthpixStartACol:=AxisXCol1 pixEndACol:=AxisXCol1 + mmAvoid*PMM   pixStartBCol:=AxisXCol1 + mmAvoid*PMM pixEndBCol:=AxisXCol2pixStdARow:=AxisXRow1-mmStdA*PMM*MulpixStdBRow:=AxisXRow1-mmStdB*PMM*MulpixUpARow:=AxisXRow1-mmUpA*PMM*MulpixLowARow:=AxisXRow1-mmLowA*PMM*MulpixUpBRow:=AxisXRow1-mmUpB*PMM*MulpixLowBRow:=AxisXRow1-mmLowB*PMM*Mulgen_contour_polygon_xld (StdLA, [pixStdARow,pixStdARow], [pixStartACol,pixEndACol])gen_contour_polygon_xld (StdLB, [pixStdBRow,pixStdBRow], [pixStartBCol,pixEndBCol])*A区上下限gen_contour_polygon_xld (UpLA, [pixUpARow,pixUpARow], [pixStartACol,pixEndACol])gen_contour_polygon_xld (LowLA, [pixLowARow,pixLowARow], [pixStartACol,pixEndACol])*B区上下限gen_contour_polygon_xld (UpLB, [pixUpBRow,pixUpBRow], [pixStartBCol,pixEndBCol])gen_contour_polygon_xld (LowLB, [pixLowBRow,pixLowBRow], [pixStartBCol,pixEndBCol])dev_set_color ('white')dev_display (AxisX)dev_display (AxisY)dev_set_color ('green')dev_display (ContourReal)dev_set_color ('blue')dev_display (StdLA)dev_display (StdLB)dev_set_color ('red')dev_display (UpLA)dev_display (LowLA)dev_display (UpLB)dev_display (LowLB)stop()endfor
dev_update_on ()

6. 两种方法的不同

  • 抓边的方法精度精度更高,是亚像素级别的,但是存在有时抓不到变得风险;
  • Blob差分方法精度不高,是像素级别的,但是稳定性更好;
  • 实际项目中到底要用哪种方法,还需要具体情况具体分析。

7. 资源下载

https://download.csdn.net/download/weixin_38566632/37361354

halcon——在图形窗口中画坐标系相关推荐

  1. 在matlab中画多个图,Matlab在一个图形窗口里画多个图形的详细教程

    原创Matlab在一个图形窗口里画多个图形的详细教程 编辑:佚名 来源:PC下载网时间:2019-11-18 13:35:08 对于Matlab软件各位应该还有不懂的地方,比如说想在一个图形窗口里画多 ...

  2. matlabapp窗口图像_Matlab在一个图形窗口里画多个图形的操作教程

    小伙伴们你们知道在Matlab在一个图形窗口里画多个图形呢?今天小编很乐意与大家分享在Matlab在一个图形窗口里画多个图形的技巧,感兴趣的可以来了解了解哦. Matlab在一个图形窗口里画多个图形的 ...

  3. matlab plot多个窗口,Matlab在一个图形窗口里画多个图形的详细教程

    Matlab在一个图形窗口里画多个图形的详细教程 作者:佚名 来源:PC下载网时间:2019-11-18 13:35:08 对于Matlab软件各位应该还有不懂的地方,比如说想在一个图形窗口里画多个图 ...

  4. mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释

    1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...

  5. VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor

    目录 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor 接上:VC++ 绘制线条 OnLButtonDown函数 ...

  6. 用鼠标在窗口中画方形的程序------基于OpenCV+VS

    /*-------------------------------------------------------------------------------------------------- ...

  7. matlab中在同一图形窗口中绘制出一个周期内的正弦曲线和余弦曲线,多选(3分) 在一个图形窗口同时绘制[0,2π]的正弦曲线、余弦曲线,可以使用命令( )。...

    竞技体育的竞争性主要表现在"竞"和"技"两个方面 [多选题]审计分析方法主要包括( ). [单选题]unique [单选题]第三次信息化浪潮的标志是 [多选题] ...

  8. opengl绘制刻度坐标系_OpenGL中的坐标系-2D

    关于坐标系系统 在图形渲染管线中,坐标系系统扮演了一个非常重要的角色,他们并不是很复杂.当我们在学校学习几何的时候,第一个接触到的就是坐标.不过,还是让我们来先见识一下这些东西,这将使得我们更容易理解 ...

  9. matlab清除所有图形窗口,matlab图形操作基础

    轴的产生和控制命令 命令1 axes 功能 创建坐标轴图形对象.该命令是创建坐标轴图形对象的低级函数命令. 用法 axes 在当前图形窗口中用缺省的属性值创建一坐标轴图形对象. axes('Prope ...

最新文章

  1. JVM怎么判断对象是否存活
  2. 中关村-DIY操作系统之不分区安装Ubuntu系统
  3. 制作 Windows8   to Go
  4. oracle的安装与plsql的环境配置
  5. 为什么某些地方结婚彩礼那么高呢?而广东却很低甚至不需要?
  6. JSOI 2008 【魔兽地图】
  7. WinForm+ADO.net应用(二)+ 例子源码
  8. 罗森伯格高端布线助力昆山基地
  9. 操作文件读写JSON的建议工具类
  10. android手机模拟鼠标控制pc,利用Android手机仿真PC鼠标的设计与实现
  11. MC9S12 RTI 时钟的设置
  12. 从自媒体人到服务商 职业信鸽主播的快手商业之路
  13. Atitit 手机号码选号 规范 流程 attilax总结 v2 r99.docx
  14. echarts 桑基图 添加标志线问题
  15. eclipse命令大全
  16. 从零开始开发SSM项目-博客系统实战
  17. 和平精英修改服务器内存,和平精英极限帧率怎么调 极限帧率修改攻略[多图]
  18. 在ArcGIS中导入excel中的经纬度点数据,但和其它shp数据无法同时显示的问题
  19. 算法之克鲁斯卡尔(Kruskal)算法
  20. mvcmvpmvvm

热门文章

  1. moss2007-搜索服務
  2. shell编写一键安装mysql.sh
  3. 实战:从Mysql数据库frm文件中,提取表结构创建SQL语句
  4. Kubernetes面试题
  5. 【Oracle】数据库范式
  6. IDEA中项目引入独立包打包失败问题解决(找不到包)
  7. vue添加滚动事件,解决简书Carol_笑一笑方案中vue移除滚动事件失效的问题
  8. eclipse 中提示tomcat 的端口被占用了 后的最快捷解决方法
  9. 解析docker中的环境变量使用和常见问题解决
  10. Windows下使用TeamViewer连接远程服务器,以及解决“远程桌面关闭后TeamViewer不能连接”的问题