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

带角度的内接矩形问题

[复制链接]
hanfang 发表于 2025-8-22 11:53:19 | 显示全部楼层 |阅读模式
本帖最后由 hanfang 于 2025-8-23 18:53 编辑

halcon的内接矩形是平行于X轴的,没有带角度,一开始想的处理方式是将图片旋转一定的小角度,暴力求解最大面积的内接矩形,但是这样做要达到高精度就要将每次旋转的角度设置的很小,加上像素大这种处理方式速度太慢了,求助各位大佬有没有好的方式推荐,非常感谢!比如说我只找白色矩形和管夹之间黑色部分的最小距离。
捕获.PNG
图片1.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
UKimiF 发表于 2025-8-22 13:30:02 | 显示全部楼层
用外接旋转矩形获得角度,仿射变换后凸包然后获取区域的宽高,再用横向和竖向开运算 宽度为1高度为H-10和高度为1宽度为W-10处理,得到区域后再仿射变换回去
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
UKimiF 发表于 2025-8-26 08:59:15 | 显示全部楼层
楼主后面发的图片我也看了一下,可以看一下是不是这样的效果:
  1. dev_update_off ()
  2. read_image (Image, './1.png')
  3. rgb1_to_gray (Image, Image)
  4. get_image_size (Image, Width, Height)
  5. *//提取基准区域
  6. *//如果觉得边缘抓取不够可以改成固定阈值或者其他阈值提取方式
  7. binary_threshold (Image, RegionB, 'max_separability', 'light', UsedThreshold)
  8. connection (RegionB, RegionB)
  9. *//过滤杂质和背景
  10. select_shape (RegionB, RegionB, ['area','width','height'], 'and', [100,10,10], [99999, Width-10, Height-10])
  11. *//得到需要测量的区域
  12. select_shape_std (RegionB, RegionO, 'max_area', 70)
  13. *//获得基准区域
  14. difference (RegionB, RegionO, RegionB)
  15. union1 (RegionB, RegionB)
  16. closing_circle (RegionB, RegionBC, 10.5)
  17. connection (RegionBC, RegionBC)
  18. select_shape_std (RegionBC, RegionBC, 'max_area', 70)
  19. intersection (RegionB, RegionBC, RegionB)

  20. *//计算距离
  21. smallest_rectangle2 (RegionO, RowO, ColO, PhiO, L1O, L2O)
  22. gen_rectangle2 (RectO, RowO, ColO, PhiO, L1O, L2O)
  23. distance_rr_min (RegionB, RectO, MinDis, R1, C1, R2, C2)
  24. *//获得中间的矩形框
  25. gen_rectangle2 (RectOB, RowO, ColO, PhiO, L1O+MinDis, L2O)
  26. difference (RectOB, RectO, RectOB)
  27. connection (RectOB, RectOB)
  28. sort_region (RectOB, RectOB, 'first_point', 'false', 'row')
  29. select_obj (RectOB, RectOB, 1)

  30. dev_clear_window ()
  31. dev_display (Image)
  32. dev_set_line_width (2)
  33. dev_set_draw ('margin')
  34. dev_set_color ('red')
  35. dev_display (RegionO)
  36. dev_set_color ('green')
  37. dev_display (RectOB)
  38. disp_message (200000, 'Dis: '+MinDis+' pix', 'image', 10, 10, 'green', 'false')
复制代码
效果图.png
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
m7story 发表于 2025-8-28 21:24:26 | 显示全部楼层
学习了
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
 楼主| hanfang 发表于 2025-8-30 14:44:59 | 显示全部楼层
UKimiF 发表于 2025-8-26 08:59
楼主后面发的图片我也看了一下,可以看一下是不是这样的效果:

感谢大佬的帮助给我提供了另一个思路,定位白色矩形的位置,再拟合铁圈直线计算距离,虽然问题解决了,但是内接矩形的问题还是困扰着我,为什么halcon不提供带角度的内接矩形
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
UKimiF 发表于 2025-9-1 08:19:58 | 显示全部楼层
hanfang 发表于 2025-8-30 14:44
感谢大佬的帮助给我提供了另一个思路,定位白色矩形的位置,再拟合铁圈直线计算距离,虽然问题解决了,但 ...

这不是Halcon的问题,最小外接是唯一的啊,区域的最大内接矩形不唯一,得你自己写筛选逻辑
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
347784474 发表于 2025-9-18 16:13:34 | 显示全部楼层
学到了  mark一下
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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