Wint_1996
初学者
初学者
  • 最后登录2020-06-05
  • 发帖数16
  • 金币85枚
  • 贡献勋章0枚
  • 社区居民
阅读:231回复:9

定位并找圆

楼主#
更多 发布于:2020-05-21 17:11

list_image_files ('.', 'default', [], ImageFiles)read_image (ImageModel, ImageFiles[0])
dev_set_draw ('margin')
gen_rectangle1 (ROI_0, 75.2981, 481.751, 507.636, 898.23)
reduce_domain (ImageModel, ROI_0, ImageReduced)
dev_display (ImageReduced)
*亚像素轮廓
edges_sub_pix (ImageReduced, Edges, 'canny', 1, 40, 70)
*创建轮廓模板
create_shape_model_xld (Edges, 'auto', rad(-180), rad(360), 'auto', 'auto', 'ignore_local_polarity', 5, ModelID)
*找模板图片的轮廓位置
* get_shape_model_contours (ModelContours, ModelID, 1)
find_shape_model (ImageModel, ModelID, rad(-180), rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, RowModel, ColumnModel, AngleModel, Score)
    
for Index := 0 to |ImageFiles|-1 by 1
    read_image (Image, ImageFiles[Index])
    find_shape_model (Image, ModelID, rad(-180), rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, RowCur, ColumnCur, AngleCur, Score)
    *得到现在图片与模板图 矩阵变化
    vector_angle_to_rigid (RowModel, ColumnModel, AngleModel, RowCur, ColumnCur, AngleCur, HomMat2D)
*     hom_mat2d_identity (HomMat2DIdentity)
*     hom_mat2d_rotate (HomMat2DIdentity, AngleCur, 0, 0, HomMat2DRotate)
*     hom_mat2d_translate (HomMat2DRotate, RowCur, ColumnCur, HomMat2DTranslate)
    *将模板轮廓 根据矩阵变化 贴合现在图片显示
     affine_trans_contour_xld (Edges, ContoursAffineTrans, HomMat2D)
    *创建测量模型
    create_metrology_model (MetrologyHandle)
    *模板图的圆位置ROI
*     gen_circle (ROI_1, 527.164, 705.082, 255.129)
    circleRowModel:=527.164
    circleColumnModel:=705.082
    circleParam:=[527.164, 705.082, 255.129]

    *圆位置变换关系
    affine_trans_point_2d (HomMat2D, circleRowModel, circleColumnModel,circleRow, circleColumn)
    *添加当前圆的测量模型
    *(1)_generic 通用工具 可为圆 矩形 等 'circle' 找圆
*     add_metrology_object_generic (MetrologyHandle, 'circle', circleParam, 20, 5, 1, 30, [], [], Index1)
    *(2)_circle  添加圆工具   'measure_select'  'measure_select'
    add_metrology_object_circle_measure (MetrologyHandle, circleRow, circleColumn, 255.129, 20, 5, 1, 30, 'measure_select', 'first', Index1)
   *适应模型
    apply_metrology_model (Image, MetrologyHandle)
    *获取结果
    get_metrology_object_result (MetrologyHandle, Index1, 'all', 'result_type', 'all_param', Parameter)
    *获取模型用到的点
    get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row, Column)
    *取每个卡尺取到的点
    gen_cross_contour_xld (Cross, Row, Column, 6, 0.785398)
    *点——>轮廓
    gen_contour_polygon_xld (Contour, Row, Column)
    *拟合圆
    fit_circle_contour_xld (Contour, 'algebraic', -1, 0, 0, 3, 2, Row1, Column1, Radius, StartPhi, EndPhi, PointOrder)
    gen_circle (Circle, Row1, Column1, Radius)
    dev_display (Circle)
    stop()
endfor

图片就是halcon自带图片,目录:HALCON-19.11-Progress\examples\images\brake_disk

新手学习,还请各位大佬多指教
喜欢0

最新打赏:0人

tzj9987
技术员
技术员
  • 最后登录2020-06-05
  • 发帖数175
  • 金币339枚
  • 贡献勋章0枚
沙发#
发布于:2020-05-22 09:32
测试一下看,,,,,,,,,,,,,,,,,
helenzou
初学者
初学者
  • 最后登录2020-06-04
  • 发帖数34
  • 金币59枚
  • 贡献勋章0枚
  • 社区居民
板凳#
发布于:2020-05-22 09:49
比较基础的内容呀,哈哈
简单却不失激情
初学者
初学者
  • 最后登录2020-06-02
  • 发帖数37
  • 金币35枚
  • 贡献勋章0枚
  • 社区居民
地板#
发布于:2020-05-22 10:04
有用,Mark一下.......
pdcboy
初学者
初学者
  • 最后登录2020-06-03
  • 发帖数58
  • 金币85枚
  • 贡献勋章0枚
  • 社区居民
  • 忠实会员
4楼#
发布于:2020-05-23 15:11
还是非常不错的,哈哈,学习了
HalconChen
技术员
技术员
  • 最后登录2020-06-05
  • 发帖数122
  • 金币216枚
  • 贡献勋章0枚
  • 社区居民
5楼#
发布于:2020-05-25 08:16
感谢楼主,感谢分享!!!
kunge98321
技术员
技术员
  • 最后登录2020-05-30
  • 发帖数103
  • 金币139枚
  • 贡献勋章0枚
  • 社区居民
6楼#
发布于:2020-05-25 10:50
感谢楼主,感谢分享!!!
xuedeyumu
初学者
初学者
  • 最后登录2020-06-01
  • 发帖数30
  • 金币5枚
  • 贡献勋章0枚
7楼#
发布于:2020-05-26 11:45
还是非常不错的,哈哈,学习了
13763220456
初学者
初学者
  • 最后登录2020-06-04
  • 发帖数94
  • 金币72枚
  • 贡献勋章0枚
8楼#
发布于:2020-05-28 10:27
还是非常不错的,哈哈,学习了
kunge98321
技术员
技术员
  • 最后登录2020-05-30
  • 发帖数103
  • 金币139枚
  • 贡献勋章0枚
  • 社区居民
9楼#
发布于:2020-05-28 11:55
有用,Mark一下.......
游客

返回顶部
支付

欢迎打赏,请选择打赏金额

  • 1元
  • 6元
  • 10元
  • 66元
  • 100元

支付即代表同意《本站支付协议》 有疑问请联系客服