需求:计算下图中7个白色矩形的平均宽度大小

方法一:提取边白色矩形与背景的交界线,通过直线拟合,利用算子计算两直线距离。

代码:

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_update_off ()
count_seconds (T1)
read_image (Image1, '图片的位置')
*判断图像的通道数,来决定是否将其转换为灰度图
count_channels (Image1, Channels)
if (Channels==3)rgb1_to_gray (Image1, Image1)
endif
*将需要测量距离的地方提取出来
threshold (Image1, Region, 128, 255)
connection (Region, ConnectedRegions)
*形状选择
select_shape (ConnectedRegions, SelectedRegions, ['rect2_len1','rect2_len2'], 'and', [100,50], [150,80])
select_shape (SelectedRegions, SelectedRegions1, 'convexity', 'and', 0.8, 1)
*正确提取后应该有七个目标块
count_obj (SelectedRegions1, Number)
if (Number!=7)stop ()
endif
*将七个目标块合并
union1 (SelectedRegions1, RegionUnion)
*裁剪出ROI
smallest_rectangle1 (RegionUnion, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1+30, Column1-10, Row2-30, Column2+10)
reduce_domain (Image1, Rectangle, ImageReduced)
*提取边
edges_sub_pix (ImageReduced, Edges, 'canny', 1, 20, 40)
*合并轮廓
union_adjacent_contours_xld (Edges, UnionContours, 10, 1, 'attr_keep')
select_shape_xld (UnionContours, SelectedXLD, 'contlength', 'and', 150, 99999)
*正确提取后应该有14个线段
count_obj (SelectedXLD, Number1)
if (Number1!=14)stop ()
endif
*按列对轮廓进行排序
sort_contours_xld (SelectedXLD, SortedContours, 'upper_left', 'true', 'column')
*边缘遍历
a:=[]
for i := 1 to Number1 by 2read_image (Image, 'printer_chip/printer_chip_01')select_obj (SortedContours, Obj1, i)*最小二乘拟合直线fit_line_contour_xld (Obj1, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)*生成轮廓gen_contour_polygon_xld (Contour1, [RowBegin,RowEnd], [ColBegin,ColEnd])select_obj (SortedContours, Obj2, i+1)fit_line_contour_xld (Obj2, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)gen_contour_polygon_xld (Contour2, [RowBegin,RowEnd], [ColBegin,ColEnd])*求距离distance_cc (Contour1, Contour2, 'point_to_point', DistanceMin, DistanceMax)   *存储所求距离的不同值a:=[a,DistanceMin]
endfor
*求距离的平均值
tuple_mean (a, Mean)
count_seconds (T2)
T:=T2-T1
dev_display (Image1)
disp_message (WindowHandle, Mean, 'window', 0, 0, 'black', 'true')
disp_message (WindowHandle, T+'秒', 'window', 50, 0, 'black', 'true')

方法二:通过灰度投影形成函数,找出“明暗”交界线的两个点的横坐标做差,便可求得矩形宽度。

代码:

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_update_off ()
count_seconds (T1)
read_image (Image1, '图片的位置')dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_update_off ()*开始时间
count_seconds (T1)
*读取图像
read_image (Image1, '图片的位置')
dev_display (Image1)
*生成空区域
gen_empty_obj (rect)
*生成7个矩形区域
for i := 1 to 7 by 1dev_set_line_width(3)dev_set_draw ('margin')draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)concat_obj (rect, Rectangle, rect)
endfor
stop ()
*结果数组
a:=[]
for Index := 1 to 7 by 1*选择区域select_obj (rect, ObjectSelected, Index)*裁剪reduce_domain (Image1, ObjectSelected, ImageReduced)*计算竖直方向上的灰度投影gray_projections (ObjectSelected, ImageReduced, 'simple', HorProjection, VertProjection)*通过一个一维数组创建一个离散一维函数create_funct_1d_array (VertProjection, Function)*平滑一维函数smooth_funct_1d_gauss (Function, 2, SmoothedFunction)*一阶导数derivate_funct_1d (SmoothedFunction, 'first', Derivative)*平滑函数,获得函数的极值点smooth_funct_1d_gauss (Derivative, 2, SmoothedFunction1)*获取所有波峰波谷对应的x值local_min_max_funct_1d (SmoothedFunction1, 'strict_min_max', 'true', Min, Max)    x:=[Min,Max]*获取所有x值对应的y值get_y_value_funct_1d (SmoothedFunction1, x, 'constant', Y)*找出最大值、最小值result:=[]for i := 0 to |x|-1 by 1if (abs(Y[i])>10)result:=[result,x[i]]endifendfor*计算宽度d:=abs(result[0]-result[1])a:=[a,d]stop ()
endfor
*求平均值
tuple_mean (a, Mean)
disp_message (WindowHandle, Mean, 'window', 0, 0, 'black', 'true')

注:这段代码“draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)”执行时需要从左至右框选七个矩形。矩形大小以刚好框柱白色矩形但又含有边缘交界为宜,如下图所示。

halcon测量距离相关推荐

  1. halcon测量硬币真实直径

    ** @halcon测量硬币真实直径 2019.3.10 9:25am 目的 熟练掌握halcon相机标定,理解其意义并且知道如何应用内外参数. 解决思路 在这个问题中,首先要测出硬币在图像中的像素尺 ...

  2. 根据声音信号测量距离

    很多动物依赖于声音来感知外部的环境,像夜间活动的蝙蝠.树鼩,海洋里的生物鲸鱼.海豚等.声呐定位不仅给它们追踪猎物.躲避天敌的方法,有时也可以给它们寻觅配偶提供方便. 依靠听觉定位的动物 工业革命之后, ...

  3. Vue+Openlayers实现绘制线段并测量距离显示

    场景 Vue+Openlayer使用Draw实现交互式绘制线段: Vue+Openlayer使用Draw实现交互式绘制线段_BADAO_LIUMANG_QIZHI的博客-CSDN博客_vue 线段 在 ...

  4. 【ArcGIS微课1000例】0017:ArcGIS测量距离和面积工具的巧妙使用

    文章目录 1 交互式测量 2 测量要素 ArcGIS提供了快速测量距离和面积的工具,通过测量工具可对地图中的线和面进行测量. 工具条: 测量工具位于[工具]工具条上,如下图所示: 测量界面: 功能按钮 ...

  5. 我的世界修改服务器视距,教程/测量距离 - Minecraft Wiki,最详细的官方我的世界百科...

    在Minecraft的距离是很容易衡量的. Minecraft官方[1]使用公用单位制,每一个方块就是一立方米.为了测量长距离,可以简单地用火把或者其他东西作为标记每十格放一个.每次放到第十个标记时用 ...

  6. 【Cesium】【vue】空间查询——量距(测量距离)、量面(测量面积)

    目录 一.量距 二.量面 三.清除测量 四.页面结构 注意 参考 一.量距 // 距离测量measureLineSpace() {this.removeMeasure();let _this = th ...

  7. 米斯齐超声波传感器显示测量距离(oled)内附Arduino代码

    用到的东西:     超声波传感器,uno,SSD1306 OLED显示屏 超声波:gnd-gnd              vcc-5v              trig-接脚这里是A0     ...

  8. 工程计算和数据科学中常用的9种测量距离

    很多算法中,无论是自动驾驶算法还是人工智能算法,都会涉及到距离测量的内容.例如:欧氏距离或者cos相似度,在KNN.UMAP.HDBSCAN等算法中很常见. 理解这些距离测量使用的具体领域,对于我们理 ...

  9. 苹果手机测距离_手机上有个小功能,可以精确的测量距离,比卷尺还要好用

    平时我们测量长度都得用到尺子,不过你知道吗?手机上也有一种测量距离的东西,非常的好用,今天就给大家演示一遍. 苹果手机 1.苹果手机都自带一个[测距仪],点开它,我们来测量一部手机到底有多长,可以看到 ...

  10. AndroidBLE--Measuring distance(测量距离)

    iBeacon介绍 iBeacon是苹果在2013年WWDC上推出一项基于蓝牙4.0(Bluetooth LE | BLE | Bluetooth Smart)的精准微定位技术,当你的手持设备靠近一个 ...

最新文章

  1. 实施Kubernetes可以实现多云架构安全
  2. 资源贴|吴恩达新课发布第1天,3万人观看 | 完整PPT
  3. 如何查看mysql索引
  4. Python爬虫(七)_非结构化数据与结构化数据
  5. 【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 )
  6. idea lombok安装后还是标红_小辣椒神器Lombok
  7. AS插件-Android Parcelable code generator.
  8. 重要通知:PMCAFF播客上线了!
  9. Struts2拦截SQL注入
  10. c语言源程序由将其转换为目标程序,将C语言编写的源程序转换为目标程序的软件属于______。...
  11. 教小学妹学算法:十大经典排序算法深度解析
  12. aws高额账单_取消堆放以提高延迟并减少AWS账单
  13. 织梦ajax表单提交参数错误,【织梦二次开发】织梦jquery+ajax方式提交自定义表单...
  14. 企业信息化建设过程中,交通物流行业如何凭借数据成功转型?
  15. python boxplot用法_Boxplot的介绍和使用
  16. JavaScript——语法
  17. 升级成员服务器-从Windows 2012升级到2016案例之2
  18. 2013,安全管理平台(SOC)业务的重新崛起
  19. 内外网共存环境迁移Exchange 2010至Exchange 2016
  20. C++常用的大小写转换的方法

热门文章

  1. 【防火墙篇】02. 向导快速设置 ❀ Juniper 防火墙
  2. 商用密码应用解决方案编写指南
  3. openerp 打印报表pdf中文乱码解决办法
  4. walking机器人入门教程-工具-命令管理器
  5. icpc 2019 沈阳区域赛
  6. 智慧养老之智慧养老解决方案-新导智能
  7. 最近越来越当心,是不是自己真的老了。。。
  8. git cherry-pick使用总结
  9. java 中的radix_Java Scanner radix()用法及代码示例
  10. vue使用JSzip读取压缩包文件内容进行MD5加密