开启左侧

求助,用Halcon获取物体旋转角度

[复制链接]
arvin1121 发表于 2018-8-9 22:04:39 | 显示全部楼层 |阅读模式
小弟初学,求大神们指导怎么获取物体旋转角度,获取到第二张图相对第一张图的旋转度数,误差1度内。
图一如下

图片1

图片1


图二如下

图片2

图片2
Criss 发表于 2018-8-10 09:33:58 | 显示全部楼层
用标准的MADE IN CHINA做定位模板,然后检测其他物体,得到的角度就是旋转角度!
 楼主| arvin1121 发表于 2018-8-10 10:11:05 | 显示全部楼层
51Halcon 发表于 2018-8-10 09:33
用标准的MADE IN CHINA做定位模板,然后检测其他物体,得到的角度就是旋转角度! ...

MADE IN CHINA?  大神这个怎么用,能介绍具体点吗?{:1_313:}
完美世界 发表于 2018-8-10 10:15:49 | 显示全部楼层
先选择一条边界清晰的便找边的角度A,再用Madeinchaina,或者其他标志坐模板匹配,找到旋转后的边的角度B,这样旋转角度就是B-A
Criss 发表于 2018-8-10 10:22:38 | 显示全部楼层
完美世界 发表于 2018-8-10 10:15
先选择一条边界清晰的便找边的角度A,再用Madeinchaina,或者其他标志坐模板匹配,找到旋转后的边的角度B, ...

差不多的这个意思!大概原理就是利用盖子上面的特征的来获取位置,然后在定位获取新位置,这样就知道角度怎么旋转了!
 楼主| arvin1121 发表于 2018-8-10 16:32:09 | 显示全部楼层
51Halcon 发表于 2018-8-10 10:22
差不多的这个意思!大概原理就是利用盖子上面的特征的来获取位置,然后在定位获取新位置,这样就知道角度 ...

请问大师,怎么把 MADEINCHAINA 做成模版?能帮忙写个代码段参考下吗? 万分感谢
feel 发表于 2018-8-10 17:12:29 | 显示全部楼层
小手一痒...匹配助手拖了一下。不知道是不是你要的效果。
当然我没用Madeinchaina这个实现你自己去操作

TIM截图20180810170926.png

TIM截图20180810170943.png

  1. read_image(Image2,'C:/ Users / Pictures / 2.png')
  2. *匹配01:模型初始化生成代码的BEGIN
  3. set_system('border_shape_models','false')
  4. *匹配01:获取模型图像
  5. *匹配01:假设图像在
  6. *匹配中可用01:变量最后显示在图形窗口中
  7. copy_obj(Image2,Image,1,1)
  8. *匹配01:从基本区域构建ROI
  9. gen_rectangle1(ModelRegion,363.354,445.481,465.233,537.484)
  10. *匹配01:减少模型模板
  11. reduce_domain (Image,ModelRegion,TemplateImage)
  12. *匹配01:创建形状模型
  13. create_shape_model(TemplateImage,3,rad(0),rad(360),rad(2.5886),['none','no_pregeneration'],'use_polarity',[16,22,4],10,ModelId)
  14. *匹配01 :获取模型轮廓以便稍后将其转换为图像
  15. get_shape_model_contours(ModelContours,ModelId,1)
  16. *匹配01:生成代码的END用于模型初始化
  17. *匹配01:模型应用生成代码的BEGIN
  18. *匹配01:以下操作是通常移动到
  19. *匹配01:处理获取图像的循环
  20. *匹配01:找到模型

  21. *图像采集01:图像采集生成的代码01
  22. list_files('C:/ Users / Pictures',['files',' follow_links'],ImageFiles)
  23. tuple_regexp_select(ImageFiles,['\\。(tif | tiff | gif | bmp | jpg | jpeg | jp2 | png | pcx | pgm | ppm | pbm | xwd | ima | hobj),'ignore_case'],ImageFiles)
  24. 索引:= 0到| ImageFiles | -  1 by 1
  25.     read_image(Image,ImageFiles [Index])
  26.     *图像采集01:做一些事情
  27.     find_shape_model(Image,ModelId,rad(0),rad(360),0.7,0,0.5,'least_squares',[3,1 ],1,ModelRow,ModelColumn,ModelAngle,ModelScore)
  28. *匹配01:将模型轮廓转换

  29. 为MatchingObjIdx 的检测位置:= 0到| ModelScore | -  1 by 1
  30.     hom_mat2d_identity(HomMat)
  31.     hom_mat2d_rotate(HomMat,ModelAngle [MatchingObjIdx],0,0,HomMat)
  32.     hom_mat2d_translate(HomMat,ModelRow [MatchingObjIdx],ModelColumn [MatchingObjIdx],HomMat)
  33.     affine_trans_contour_xld(ModelContours,TransContours,HomMat)
  34.     disp_message(3600,deg(ModelAngle),'window',20,20,'black','true')
  35.     dev_display(TransContours)
  36. endfor
  37. endfor


  38. *匹配01:完成时清除模型
  39. clear_shape_model(ModelId )
  40. *匹配01:模型应用程序生成代码的END
复制代码
Criss 发表于 2018-8-10 18:23:51 | 显示全部楼层
feel 发表于 2018-8-10 17:12
小手一痒...匹配助手拖了一下。不知道是不是你要的效果。
当然我没用Madeinchaina这个实现你自己去操作

厉害了我的哥!
 楼主| arvin1121 发表于 2018-8-13 10:27:32 | 显示全部楼层
feel 发表于 2018-8-10 17:12
小手一痒...匹配助手拖了一下。不知道是不是你要的效果。
当然我没用Madeinchaina这个实现你自己去操作

{:1_311:}{:1_311:},在C#中操作 怎么把创建好的模版保存起来呢?
完美世界 发表于 2018-8-13 10:33:29 | 显示全部楼层
arvin1121 发表于 2018-8-13 10:27
,在C#中操作 怎么把创建好的模版保存起来呢?

write_shapemodel这个算子就可以呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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