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

如何测量图中4个长条的长度

[复制链接]
jiangehaha 发表于 2025-7-13 21:24:01 | 显示全部楼层 |阅读模式
求助如何测量图中4个长条的长度,有两个是搭在一起的,没有思路
1.jpg
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
大凡光学,专注标定板提供
UKimiF 发表于 2025-7-14 18:59:44 | 显示全部楼层
  1. read_image (Image, './1.jpg')
  2. get_image_size (Image, Width, Height)
  3. threshold (Image, RegionB, 22, 255)
  4. connection (RegionB, RegionB)
  5. select_shape (RegionB, RegionB, 'area', 'and', 2000, 999999999)
  6. sort_region (RegionB, RegionB, 'first_point', 'true', 'column')

  7. select_obj (RegionB, Region1, 1)
  8. select_obj (RegionB, Region2, 2)

  9. *针对左边缘的区域
  10. erosion_circle (Region1, Region1E, 12.5)
  11. connection (Region1E, Region1E)
  12. dilation_circle (Region1E, Region1ED, 12.5)
  13. select_obj (Region1ED, Region1ED1, 1)
  14. select_obj (Region1ED, Region1ED2, 2)

  15. *1.计算左上区域
  16. smallest_rectangle1 (Region1ED1, Row1, Column1, Row2, Column2)
  17. gen_rectangle1 (Rect1U, Row1-100, Column1-50, Row1+100, Column2+50)
  18. intersection (Region1, Rect1U, Region1U)

  19. gen_rectangle1 (Rect1D, Row2-100, Column1-50, Row2+100, Column2+50)
  20. intersection (Region1ED1, Rect1D, Region1D)
  21. union2 (Region1U, Region1D, Region11)
  22. smallest_rectangle2 (Region11, Row11, Column11, Phi11, L111, L211)
  23. *左上测量结果可视化
  24. get_rect2_vertex (Row11, Column11, Phi11, L111, L211,\
  25.                   RowTL, ColTL, RowTR, ColTR,\
  26.                   RowBL, ColBL, RowBR, ColBR)
  27. gen_arrow_contour_xld (ArrowS111, (RowTL+RowTR)/2, (ColTL+ColTR)/2, (RowBL+RowBR)/2, (ColBL+ColBR)/2, 40, 40)
  28. gen_arrow_contour_xld (ArrowS112, (RowBL+RowBR)/2, (ColBL+ColBR)/2, (RowTL+RowTR)/2, (ColTL+ColTR)/2, 40, 40)
  29. gen_contour_polygon_xld (ContourS111, [RowTL,RowTR], [ColTL,ColTR])
  30. gen_contour_polygon_xld (ContourS112, [RowBL,RowBR], [ColBL,ColBR])
  31. concat_obj (ArrowS111, ArrowS112, ObjectsConcat1)
  32. concat_obj (ContourS111, ContourS112, ObjectsConcat2)
  33. concat_obj (ObjectsConcat1, ObjectsConcat2, ConShow11)

  34. *计算左下区域
  35. *获得左下区域Region12
  36. dilation_circle (Region1D, Region1D, 20.5)
  37. difference (Region1, Region1D, Region1)
  38. connection (Region1, Region1)
  39. sort_region (Region1, Region1, 'first_point', 'true', 'row')
  40. select_obj (Region1, Region12, 2)

  41. *2.计算和可视化
  42. smallest_rectangle2 (Region12, Row12, Column12, Phi12, L112, L212)
  43. get_rect2_vertex (Row12, Column12, Phi12, L112, L212,\
  44.                   RowTL, ColTL, RowTR, ColTR,\
  45.                   RowBL, ColBL, RowBR, ColBR)
  46. gen_arrow_contour_xld (ArrowS121, (RowTL+RowTR)/2, (ColTL+ColTR)/2, (RowBL+RowBR)/2, (ColBL+ColBR)/2, 40, 40)
  47. gen_arrow_contour_xld (ArrowS122, (RowBL+RowBR)/2, (ColBL+ColBR)/2, (RowTL+RowTR)/2, (ColTL+ColTR)/2, 40, 40)
  48. gen_contour_polygon_xld (ContourS121, [RowTL,RowTR], [ColTL,ColTR])
  49. gen_contour_polygon_xld (ContourS122, [RowBL,RowBR], [ColBL,ColBR])
  50. concat_obj (ArrowS121, ArrowS122, ObjectsConcat1)
  51. concat_obj (ContourS121, ContourS122, ObjectsConcat2)
  52. concat_obj (ObjectsConcat1, ObjectsConcat2, ConShow12)

  53. *处理右侧区域
  54. smallest_rectangle1 (Region2, Row1R2, Column1R2, Row2R2, Column2R2)
  55. gen_rectangle1 (Rect2U, Row1R2-1, Column1R2, Row1R2+400, Column2R2)
  56. intersection (Region2, Rect2U, Region2U)
  57. gen_rectangle1 (Rect2D, Row2R2-150, Column1R2, Row2R2, Column2R2)
  58. intersection (Region2, Rect2D, Region2D)

  59. connection (Region2U, Region2U)
  60. sort_region (Region2U, Region2U, 'first_point', 'true', 'column')
  61. connection (Region2D, Region2D)
  62. sort_region (Region2D, Region2D, 'first_point', 'true', 'column')
  63. select_obj (Region2U, Region2U1, 1)
  64. select_obj (Region2U, Region2U2, 2)
  65. select_obj (Region2D, Region2D1, 1)
  66. select_obj (Region2D, Region2D2, 2)
  67. union2 (Region2U1, Region2D2, Region21)
  68. union2 (Region2U2, Region2D1, Region22)

  69. *3.计算和可视化
  70. smallest_rectangle2 (Region21, Row21, Column21, Phi21, L121, L221)
  71. get_rect2_vertex (Row21, Column21, Phi21, L121, L221,\
  72.                   RowTL, ColTL, RowTR, ColTR,\
  73.                   RowBL, ColBL, RowBR, ColBR)
  74. gen_arrow_contour_xld (ArrowS211, (RowTL+RowTR)/2, (ColTL+ColTR)/2, (RowBL+RowBR)/2, (ColBL+ColBR)/2, 40, 40)
  75. gen_arrow_contour_xld (ArrowS212, (RowBL+RowBR)/2, (ColBL+ColBR)/2, (RowTL+RowTR)/2, (ColTL+ColTR)/2, 40, 40)
  76. gen_contour_polygon_xld (ContourS211, [RowTL,RowTR], [ColTL,ColTR])
  77. gen_contour_polygon_xld (ContourS212, [RowBL,RowBR], [ColBL,ColBR])
  78. concat_obj (ArrowS211, ArrowS212, ObjectsConcat1)
  79. concat_obj (ContourS211, ContourS212, ObjectsConcat2)
  80. concat_obj (ObjectsConcat1, ObjectsConcat2, ConShow21)

  81. *4.计算和可视化
  82. smallest_rectangle2 (Region22, Row22, Column22, Phi22, L122, L222)
  83. get_rect2_vertex (Row22, Column22, Phi22, L122, L222,\
  84.                   RowTL, ColTL, RowTR, ColTR,\
  85.                   RowBL, ColBL, RowBR, ColBR)
  86. gen_arrow_contour_xld (ArrowS221, (RowTL+RowTR)/2, (ColTL+ColTR)/2, (RowBL+RowBR)/2, (ColBL+ColBR)/2, 40, 40)
  87. gen_arrow_contour_xld (ArrowS222, (RowBL+RowBR)/2, (ColBL+ColBR)/2, (RowTL+RowTR)/2, (ColTL+ColTR)/2, 40, 40)
  88. gen_contour_polygon_xld (ContourS221, [RowTL,RowTR], [ColTL,ColTR])
  89. gen_contour_polygon_xld (ContourS222, [RowBL,RowBR], [ColBL,ColBR])
  90. concat_obj (ArrowS221, ArrowS222, ObjectsConcat1)
  91. concat_obj (ContourS221, ContourS222, ObjectsConcat2)
  92. concat_obj (ObjectsConcat1, ObjectsConcat2, ConShow22)

  93. dev_clear_window ()
  94. dev_display (Image)
  95. dev_set_color ('red')
  96. dev_display (ConShow11)
  97. disp_message (200000, 'L: '+number((L111*2)$'.2f')+' pix', 'image', Row11, Column11-200, 'green', 'false')
  98. dev_display (ConShow12)
  99. disp_message (200000, 'L: '+number((L112*2)$'.2f')+' pix', 'image', Row12, Column12-200, 'green', 'false')
  100. dev_display (ConShow21)
  101. disp_message (200000, 'L: '+number((L121*2)$'.2f')+' pix', 'image', Row21, Column21-200, 'green', 'false')
  102. dev_display (ConShow22)
  103. disp_message (200000, 'L: '+number((L122*2)$'.2f')+' pix', 'image', Row22-200, Column22-200, 'green', 'false')
复制代码

效果图.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复 支持 1 反对 0

使用道具 举报

UKimiF 发表于 2025-7-14 19:01:50 | 显示全部楼层
get_rect2_vertex是我自定义的函数,作用就是获得旋转矩形的四个拐点,
输入旋转矩形的中心点角度和长短轴(默认参数)输出四个拐点的坐标
你要是不想要也可以把可视化部分删掉,不影响计算。
这个函数内容如下:
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
smallest_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
if(abs(deg(Phi))>45)
    Phi:=rad(deg(Phi)-90*(Phi/abs(Phi)))
    Tmp:=Length1
    Length1:=Length2
    Length2:=Tmp
endif

tuple_sin (Phi, Sin)
tuple_cos (Phi, Cos)

*左上角
TopLeft_X := -Length1*Cos - Length2*Sin
TopLeft_Y := -Length1*Sin + Length2*Cos
RowTL := Row - TopLeft_Y
ColTL := Column + TopLeft_X

*右上角
TopRight_X := Length1*Cos - Length2*Sin
TopRight_Y := Length1*Sin + Length2*Cos
RowTR := Row - TopRight_Y
ColTR := Column + TopRight_X

*右下角
LowerRight_X := Length1*Cos + Length2*Sin
LowerRight_Y := Length1*Sin - Length2*Cos
RowBR := Row - LowerRight_Y
ColBR := Column + LowerRight_X

*左下角
LowerLeft_X := -Length1*Cos + Length2*Sin
LowerLeft_Y := -Length1*Sin - Length2*Cos
RowBL := Row - LowerLeft_Y
ColBL := Column + LowerLeft_X
return ()
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复 支持 1 反对 0

使用道具 举报

 楼主| jiangehaha 发表于 2025-7-16 21:19:33 | 显示全部楼层
UKimiF 发表于 2025-7-14 19:01
get_rect2_vertex是我自定义的函数,作用就是获得旋转矩形的四个拐点,
输入旋转矩形的中心点角度和长短轴 ...

感谢!学习了
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Alter 发表于 2025-8-12 20:45:16 | 显示全部楼层

我也遇到类似的问题,刚好。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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