设置首页收藏本站
开启左侧

查找图片中红色示意的中线

[复制链接]
会林2022 发表于 2025-6-19 19:10:40 | 显示全部楼层 |阅读模式
悬赏10视觉币
按照效果图,查找中线。(最好以图像的左半部分查找,附加为原图)
效果.jpg Image5.jpg
image.zip (957.49 KB, 下载次数: 14)

最佳答案

查看完整内容

參考hanfang 大大的方法 微調一下 自動找到線段(四張測試圖 基本可以運作! 魯棒性 須實測..)
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
hankchang 发表于 2025-6-19 19:10:41 | 显示全部楼层
參考hanfang 大大的方法
微調一下 自動找到線段(四張測試圖 基本可以運作! 魯棒性 須實測..)

  1. dev_close_window ()
  2. read_image (Image, 'C:/Users/genel/Downloads/image/Image1.jpg')
  3. get_image_size (Image, Width, Height)
  4. dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)

  5. dev_display (Image)
  6. rgb1_to_gray (Image, Image)
  7. median_image (Image, Image, 'circle', 5, 'mirrored')
  8. ********************************************************
  9. gray_opening_rect (Image, ImageOpening, 2, 221)
  10. mean_image(ImageOpening, ImageMean, 19, 19)
  11. dyn_threshold(ImageOpening, ImageMean, RegionDynThresh, 25, 'dark')
  12. dilation_rectangle1(RegionDynThresh, RegionDilation, 15, 1.5)
  13. connection(RegionDilation, ConnectedRegions)
  14. select_shape(ConnectedRegions, SelectedRegions, 'width', 'and', 1250, 1999)
  15. smallest_rectangle2(SelectedRegions, Row3, Column3, Phi, Length1, Length2)
  16. gen_rectangle2(Rectangle, Row3, Column3, Phi, Length1, 0.5)
  17. skeleton (Rectangle, Skeleton)
  18. split_skeleton_lines (Skeleton, 3,  Row1, Column1, Row2, Column2)
  19. ********************************************************
  20. *  用找到的區域 绘制直线
  21. **後面的 全部相同(刪去部分註解! 敬請見諒)
  22. * draw_line (WindowHandle, Row1, Column1, Row2, Column2)
  23. gen_region_line (Line1, Row1, Column1, Row2, Column2)


  24. * 根据绘制的直线坐标构建参数对象
  25. Line1Param := [Row1, Column1, Row2, Column2]

  26. * 1.创建计算测量句柄
  27. create_metrology_model (MetrologyHandle)
  28. * 2.设置测量模型图像的大小,主要是为了提高效率
  29. set_metrology_model_image_size (MetrologyHandle, Width, Height)
  30. * 3.添加测量模型对象
  31. add_metrology_object_generic (MetrologyHandle, 'line', Line1Param, 20, 5, 1, 30, [], [], Index)
  32. * 4.设置测量句柄的参数
  33. * 设置找线的极性 由黑到白 由白到黑 all
  34. set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'positive')
  35. * 设置测量区域的个数 卡尺数量
  36. set_metrology_object_param (MetrologyHandle, 'all', 'num_measures', 50)
  37. * 设置最少多少个点可以拟合成功
  38. set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 10)
  39. * 设置平滑系数
  40. set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 2)
  41. * 半长  卡尺搜索长度
  42. set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 50)
  43. * 半宽  卡尺投影长度
  44. set_metrology_object_param (MetrologyHandle, 'all', 'measure_length2', 0.5)
  45. * 对比度阈值
  46. set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 20)
  47. * 设置找线插值方法
  48. set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bilinear')
  49. * 设置查找到的第一条边还是第二条边
  50. set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'last')
  51. * 设置最小分数
  52. set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.5)
  53. * 5.测量并拟合测量模型中所有计量对象的几何形状
  54. apply_metrology_model (Image, MetrologyHandle)
  55. * 6.获取测量区域和计量模型的计量对象的边缘位置结果
  56. *
  57. get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
  58. * 7.把找到的点通过十字叉显示
  59. gen_cross_contour_xld (Cross, Row, Column, 3, rad(45))
  60. * 8.获取计量模型的测量结果
  61. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)
  62. *获取测量结果里的开始行坐标
  63. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'row_begin', RowBegin)
  64. *获取测量结果里的开始列坐标
  65. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'column_begin', ColBegin)
  66. *获取测量结果里的结束行坐标
  67. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'row_end', RowEnd)
  68. *获取测量结果里的结束列坐标
  69. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'column_end', ColEnd)

  70. * 查询计量对象的结果轮廓
  71. * MetrologyHandle 处理计量模型
  72. * Index 计量对象的索引 默认值:‘all’ 建议值:‘all’,0,1,2
  73. * Instance 计量对象的实例 默认值:‘all’ 建议值:‘all’,0,1,2
  74. * Resolution 相邻轮廓点之间的距离 默认值:1.5
  75. get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5)
  76. dev_set_color ('green')
  77. dev_set_line_width (2)
  78. dev_display (Contour)
  79. clear_metrology_model (MetrologyHandle)
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

hanfang 发表于 2025-6-20 09:03:32 | 显示全部楼层


  1. dev_close_window ()
  2. read_image (Image, 'C:/Users/MyUser/Desktop/Picture/image/Image2.jpg')
  3. get_image_size (Image, Width, Height)
  4. dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)

  5. dev_display (Image)
  6. rgb1_to_gray (Image, Image)
  7. median_image (Image, Image, 'circle', 5, 'mirrored')

  8. * 绘制直线
  9. draw_line (WindowHandle, Row1, Column1, Row2, Column2)
  10. gen_region_line (Line1, Row1, Column1, Row2, Column2)


  11. * 根据绘制的直线坐标构建参数对象
  12. Line1Param := [Row1, Column1, Row2, Column2]

  13. * 1.创建计算测量句柄
  14. create_metrology_model (MetrologyHandle)
  15. * 2.设置测量模型图像的大小,主要是为了提高效率
  16. set_metrology_model_image_size (MetrologyHandle, Width, Height)
  17. * 3.添加测量模型对象
  18. * 参数1:测量句柄
  19. * 参数2:要查找的模型类型 可以是 线 圆 椭圆 旋转矩形
  20. * 参数3:对应的模型参数
  21. *       ‘圆形’:类型圆的计量对象的几何形状由其中心(行,列)和半径指定
  22. *       ‘旋转矩形’:ShapeParam = [行,列,Phi,长度1,长度2]
  23. *       ‘椭圆’:ShapeParam = [行,列,Phi,Radius1,Radius2]
  24. *       ‘线’:ShapeParam = [RowBegin,ColumnBegin,RowEnd,ColumnEnd]
  25. * 参数4:MeasureLength1 垂直于边界的测量区域的一半长度  半长
  26. * 参数5:MeasureLength2 与边界相切的测量区域的一半长度  半宽  vp中的搜索长度类似
  27. * 参数6:MeasureSigma Sigma的高斯函数用于平滑 默认值:1.0   类似于过滤一半像素
  28. * 参数7:MeasureThreshold 最小边缘幅度 对比度阈值
  29. * 参数8:GenParamName 通用参数的名称 默认值: []
  30. * 参数9:GenParamValue 通用参数的值 默认值: []
  31. * 参数10:索引 创建的计量对象的索引
  32. add_metrology_object_generic (MetrologyHandle, 'line', Line1Param, 20, 5, 1, 30, [], [], Index)

  33. * 参数1:测量句柄
  34. * 参数2:Index:指定测量对象,为all时所有计量对象的参数都被设置(‘all’)
  35. * 参数3:GenParamName:输入参数名称;默认:‘num_instances’,参考:
  36. *            'measure_length1':区域,垂直于边界的测量区域的一半长度
  37. *            'measure_length2':区域,相切于边界的测量区域的一半长度
  38. *            'measure_distance':区域,两个测量区域中心之间的距离
  39. *            'num_measures':区域,测量区域数
  40. *            'measure_sigma':测量,用于平滑的高斯函数的 Sigma
  41. *            'measure_threshold':测量,最小边缘幅度阈值
  42. *            'measure_select':测量,边缘端点的选择('last'、'first')
  43. *            'measure_transition':测量,方向('all'、'negative'、 'positive')
  44. *            'measure_interpolation':测量,插值类型
  45. *            'min_score':拟合,最小分数
  46. *            'num_instances':拟合,成功拟合实例的最大数量
  47. *            'distance_threshold':拟合,距离阈值
  48. * set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'all')
  49. * 4.设置测量句柄的参数
  50. * 设置找线的极性 由黑到白 由白到黑 all
  51. set_metrology_object_param (MetrologyHandle, 'all', 'measure_transition', 'positive')
  52. * 设置测量区域的个数 卡尺数量
  53. set_metrology_object_param (MetrologyHandle, 'all', 'num_measures', 50)
  54. * 设置最少多少个点可以拟合成功
  55. set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 10)
  56. * 设置平滑系数
  57. set_metrology_object_param (MetrologyHandle, 'all', 'measure_sigma', 2)
  58. * 半长  卡尺搜索长度
  59. set_metrology_object_param (MetrologyHandle, 'all', 'measure_length1', 50)
  60. * 半宽  卡尺投影长度
  61. set_metrology_object_param (MetrologyHandle, 'all', 'measure_length2', 0.5)
  62. * 对比度阈值
  63. set_metrology_object_param (MetrologyHandle, 'all', 'measure_threshold', 20)
  64. * 设置找线插值方法
  65. set_metrology_object_param (MetrologyHandle, 'all', 'measure_interpolation', 'bilinear')
  66. * 设置查找到的第一条边还是第二条边
  67. set_metrology_object_param (MetrologyHandle, 'all', 'measure_select', 'last')
  68. * 设置最小分数
  69. set_metrology_object_param (MetrologyHandle, 'all', 'min_score', 0.5)
  70. * 5.测量并拟合测量模型中所有计量对象的几何形状
  71. apply_metrology_model (Image, MetrologyHandle)
  72. * 6.获取测量区域和计量模型的计量对象的边缘位置结果
  73. * 参数1:Contours 测量区域的矩形XLD轮廓
  74. * 参数2:处理计量模型
  75. * 参数3:计量对象的索引 默认值:‘all’
  76. * 参数4:Transition 选择浅色/深色或深色/浅色边缘 默认值:‘all’
  77. * 参数5、6:输出查找到点的行列坐标
  78. get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
  79. * 7.把找到的点通过十字叉显示
  80. * 为每个输入点(行、列)生成交叉形状的XLD轮廓
  81. * Cross(out):生成XLD轮廓
  82. * Row(in):输入点集的行坐标
  83. * Col(in):输入点集的列坐标,Col元组的个数与Row元组的个数相同
  84. * Size(in):十字形长度,长度大于等于0
  85. * Angle(in):十字形方向
  86. gen_cross_contour_xld (Cross, Row, Column, 3, rad(45))
  87. * 8.获取计量模型的测量结果
  88. * 参数1:测量句柄
  89. * 参数2:Index 计量对象的索引
  90. * 参数3:Instance 计量对象的实例
  91. * 参数4:通用参数的名称 默认值:‘result_type’ 值列表:‘angle_direction’,‘result_type’,‘used_edges’
  92. *        如果GenParamName设置为’result_type’,则GenParamValue允许控制计量对象的返回方式和结果。
  93. *        可以立即查询查询的计量对象的所有测量参数,可以单独查询特定参数或者可以查询计量对象的分数

  94. *        ‘angle_direction’:该参数确定由拟合产生的角度的旋转方向。
  95. *        将参数’angle_direction’设置为’正’,在物体的主轴和坐标系的水平轴之间以数学正方向(逆时针方向)指定角度。
  96. *        将参数’angle_direction’设置为’负’,在对象的主轴和坐标系的水平轴之间沿数学负方向(顺时针)指定角度。角度的结果以弧度返回。
  97. *        ‘used_edges’:
  98. *        要查询实际用于拟合度量对象的边缘点,可以选择以下GenParamValue值:
  99. *        ‘行’:返回用于拟合度量对象的边的行坐标。
  100. *        ‘列’:返回用于拟合度量对象的边的列坐标。
  101. *        ‘振幅’:返回用于拟合度量对象的边缘的边缘幅度。
  102. * 参数5:泛型参数的值 默认值:‘all_param’
  103. * 参数6:结果值
  104. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)
  105. *获取测量结果里的开始行坐标
  106. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'row_begin', RowBegin)
  107. *获取测量结果里的开始列坐标
  108. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'column_begin', ColBegin)
  109. *获取测量结果里的结束行坐标
  110. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'row_end', RowEnd)
  111. *获取测量结果里的结束列坐标
  112. get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'column_end', ColEnd)

  113. * 查询计量对象的结果轮廓
  114. * MetrologyHandle 处理计量模型
  115. * Index 计量对象的索引 默认值:‘all’ 建议值:‘all’,0,1,2
  116. * Instance 计量对象的实例 默认值:‘all’ 建议值:‘all’,0,1,2
  117. * Resolution 相邻轮廓点之间的距离 默认值:1.5
  118. get_metrology_object_result_contour (Contour, MetrologyHandle, 'all', 'all', 1.5)
  119. dev_set_color ('green')
  120. dev_set_line_width (2)
  121. dev_display (Contour)
  122. clear_metrology_model (MetrologyHandle)
复制代码
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

3351422122 发表于 2025-6-20 13:15:43 | 显示全部楼层
hankchang 发表于 2025-6-20 10:29
參考hanfang 大大的方法
微調一下 自動找到線段(四張測試圖 基本可以運作! 魯棒性 須實測..)

你这个就是做了一下阈值blob分析找到坐标,然后再根据上面的卡尺工具找线
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

hankchang 发表于 2025-6-20 17:41:24 | 显示全部楼层
3351422122 发表于 2025-6-20 13:15
你这个就是做了一下阈值blob分析找到坐标,然后再根据上面的卡尺工具找线 ...

不然你要每一張自己畫位置?
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表