【halcon练习-苹果logo偏移角度计算】

halcon练习-苹果logo偏移角度计算

要求

  1. 自动创建模板
  2. 叶子和果实 重心通过仿射变换显示在logo上
  3. 计算叶子与果实重心连线基于模板重心的连线的角度

示例图片

示例、基准图片:
在这里插入图片描述
待检测图一:
在这里插入图片描述
待检测图二:
在这里插入图片描述

待检测图三:
在这里插入图片描述

待检测图四:
在这里插入图片描述

运行结果

各待检测图片与示例图片的角度偏移:
1.图一
在这里插入图片描述

2.图二
在这里插入图片描述
3.图三
在这里插入图片描述
4.图四
在这里插入图片描述

halcon代码

read_image (Image, 'F:/halcon/myfile/苹果logo/基准.jpg')
rgb1_to_gray (Image, GrayImage)
get_image_size (GrayImage, Width, Height)
dev_open_window (0, 0, Width/3, Height/3, 'black', WindowHandle)
dev_set_part (0, 0, Height, Width)
*提取出logo的主体边缘
threshold (GrayImage, Region, 250, 255)
connection (Region, ConnectedRegions)
area_center (ConnectedRegions, Area, Row, Column)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 40000, 999999)
closing_circle (SelectedRegions, RegionClosing, 5)
gen_contour_region_xld (RegionClosing, Contours, 'border')
*根据边缘信息创建可缩放的形状模板
create_scaled_shape_model_xld(Contours, 'auto',rad(-180), rad(360), 'auto', 0.9, 1.1, 'auto', 'auto', 'ignore_local_polarity', 5, ModelID)
*在模板图中再次寻找模板对应的图像
find_scaled_shape_model(Image, ModelID, rad(-180), rad(360), 0.9, 1.1, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Scale, Score)

*分别对两个区域获取中心并连线
area_center(SelectedRegions, Area, Row1, Column1)
gen_cross_contour_xld(Cross, Row1, Column1, 56, 0.785398)
gen_region_line(RegionLines, Row1[0], Column1[0], Row1[1], Column1[1])

set_display_font(WindowHandle,18,'mono','false','false')
*遍历文件夹下所有图片,根据模板寻找对应图像,并对两区域中心连线,计算与模板中连线的夹角
list_files ('F:/halcon/myfile/作业2/苹果logo', ['files','follow_links','recursive'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image2, ImageFiles[Index])
*寻找模板对应图像
find_scaled_shape_model(Image2, ModelID, rad(-180), rad(360), 0.9, 1.1, 0.5, 1, 0.5, 'interpolation', 0, 0.9, Row2, Column2, Angle2, Scale, Score2)
    if(|Row2|)
        *计算从模板到目标图形的齐次变换矩阵
        vector_angle_to_rigid(Row, Column, Angle, Row2, Column2, Angle2, HomMat2D)
        *分别计算两个独立图形重心相对于模板的仿射变换坐标
        affine_trans_pixel(HomMat2D, Row1[0], Column1[0], RowTrans0, ColTrans0)
        affine_trans_pixel(HomMat2D, Row1[1], Column1[1], RowTrans1, ColTrans1)
        gen_cross_contour_xld(Cross2, [RowTrans0,RowTrans1], [ColTrans0,ColTrans1], 56, 0.785398)
        *对仿射变换后两点进行连线
        gen_region_line(RegionLines1, RowTrans0, ColTrans0, RowTrans1, ColTrans1)
        *计算连根线的夹角
        angle_ll(Row1[0], Column1[0], Row1[1], Column1[1],  RowTrans0, ColTrans0, RowTrans1, ColTrans1, Angle2)

        dev_display_shape_matching_results(ModelID, 'red', Row2, Column2, Angle2, 1, 1, 0)
        dev_set_color('green')
        dev_display(RegionLines)
        dev_set_color('red')
        dev_display(RegionLines1)
        
        disp_message (WindowHandle, '红色(找到的图形)与绿色(模板图形)的夹角:'+deg(Angle2)+'°', 'image', RowTrans1, ColTrans1+10, 'green', 'false')
    else
        disp_message (WindowHandle, '未找到模板对应图形', 'image', 10, 10, 'red', 'false')
    endif
    stop()
endfor
clear_shape_model(ModelID)
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值