机器视觉halcon学习——找角点

目标:给一组图片,找到每张图片的角点坐标。

原图
在这里插入图片描述
效果图
在这里插入图片描述
代码

read_image(Image,'D:/1207_培训/培训计划/halcon培训测试题/模板匹配/测试题/定位角/Image_0001664162743348.bmp')
dev_get_window(WindowHandle)
get_image_size(Image, Width, Height)
*制作模板
draw_rectangle1(WindowHandle, Row14, Column14, Row24, Column24)
gen_rectangle1(Rectangle, Row14, Column14, Row24, Column24)
*获取模板的中心坐标 Row3, Column3,后面矩阵仿射的时候用
area_center(Rectangle, Area, Row3, Column3)
reduce_domain(Image, Rectangle, ImageReduced)
create_shape_model(ImageReduced, 'auto',rad(-180), rad(720), 'auto', 'auto', 'ignore_global_polarity', 'auto', 'auto', ModelID)
*自己画线(这个算子是外部算子)
draw_rake(Regions, WindowHandle, 30, 60, 15, Row1, Column1, Row2, Column2)
draw_rake(Regions1, WindowHandle, 30, 60, 15, Row11, Column11, Row21, Column21)
*相当于卡尺工具
rake(Image, Regions2, 30, 60, 15, 1, 20, 'all', 'max',  Row1, Column1, Row2, Column2, ResultRow, ResultColumn)
gen_cross_contour_xld(Cross, ResultRow, ResultColumn, 6, 0.785398)
pts_to_best_line(Line, ResultRow, ResultColumn, 2, Row12, Column12, Row22, Column22)

rake(Image, Regions3, 30, 60, 15, 1, 20, 'all', 'max', Row11, Column11, Row21, Column21, ResultRow1, ResultColumn1)
gen_cross_contour_xld(Cross1, ResultRow1, ResultColumn1, 6, 0.785398)
pts_to_best_line(Line1, ResultRow1, ResultColumn1, 2, Row13, Column13, Row23, Column23)

list_files ('D:/1207_培训/培训计划/halcon培训测试题/模板匹配/测试题/定位角', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    *开始查找模板
    find_shape_model(Image, ModelID, rad(-180), rad(720), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
    if(|Row|>0)
        dev_display_shape_matching_results(ModelID, 'red', Row, Column, Angle, 1, 1, 0)
        *根据模板中心坐标形成一个矩阵
        vector_angle_to_rigid(Row3, Column3, 0, Row, Column, Angle, HomMat2D)
        affine_trans_pixel(HomMat2D, Row1, Column1, RowTrans, ColTrans)
        affine_trans_pixel(HomMat2D, Row2, Column2, RowTrans1, ColTrans1)
        rake(Image, Regions4, 30, 60, 15, 1, 20, 'all', 'max', RowTrans, ColTrans, RowTrans1, ColTrans1, ResultRow2, ResultColumn2)
        pts_to_best_line(Line2, ResultRow2, ResultColumn2, 2, Row15, Column15, Row25, Column25)
        
        affine_trans_pixel(HomMat2D, Row11, Column11, RowTrans2, ColTrans2)
        affine_trans_pixel(HomMat2D, Row21, Column21, RowTrans3, ColTrans3)
        rake(Image, Regions5, 30, 60, 15, 1, 20, 'all', 'max', RowTrans2, ColTrans2, RowTrans3, ColTrans3, ResultRow3, ResultColumn3)
        pts_to_best_line(Line3, ResultRow3, ResultColumn3, 2, Row16, Column16, Row26, Column26)
        *求两条直线的交点
        intersection_lines ( Row15, Column15, Row25, Column25,Row16, Column16, Row26, Column26,Row4, Column4, IsOverlapping) 
        gen_cross_contour_xld(Cross4, Row4, Column4, 40, 0.785398)
        *显示信息
        dev_set_color('green')
        dev_display(Regions4)
        dev_display(Regions5)
        dev_set_color('blue')
        dev_display(Line2)
        dev_display(Line3)
        dev_set_color('red')
        dev_display(Cross4)
        disp_message(WindowHandle, ['x:'+Row4,'y:'+Column4], 'image', Row4+10, Column4+10, 'black', 'true')
    endif
    stop()
endfor

这个效果实现的关键在于引入外部算子。外部算子的获取渠道推荐一个(51halcon视觉技术网
网址 https://www.51halcon.com/forum.php),这是我意外发现的,里面有很多的算子,以及halcon的学习资料。

如何引入外部算子

首先要找到你要引入的函数的文件,放到某个目录下。
函数——管理函数——添加
在这里插入图片描述

这个代码的难点是坐标有点多,注意不要混淆。加油呀!

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Halcon是一款强大的机器视觉软件库,它提供了丰富的功能和算法用于图像处理和分析。如果您想在C#中使用Halcon进行机器视觉开发,可以通过以下步骤进行: 1. 安装Halcon:首先,您需要从Halcon官方网站下载和安装Halcon开发环境。确保选择与您的操作系统和开发环境兼容的版本。 2. 配置Halcon与C#:在安装完成后,您需要在Visual Studio中配置Halcon与C#的集成。这涉及到引用Halcon的相关库和设置项目属性。 3. 编写C#代码:一旦完成了配置,您就可以开始编写C#代码来调用Halcon的功能了。您可以使用Halcon提供的API来加载图像、进行图像处理、执行算法等。 以下是一个简单的示例代码,演示如何使用Halcon库在C#中进行图像处理: ```csharp using HalconDotNet; class Program { static void Main(string[] args) { // 初始化Halcon引擎 HOperatorSet.OpenWindow(0, 0, 800, 600, "visible", "", out HTuple windowHandle); // 读取图像 HOperatorSet.ReadImage(out HObject image, "path/to/image.jpg"); // 显示图像 HOperatorSet.DispObj(image, windowHandle); // 进行图像处理 HOperatorSet.InvertImage(image, out HObject invertedImage); // 显示处理后的图像 HOperatorSet.DispObj(invertedImage, windowHandle); // 关闭Halcon引擎 HOperatorSet.CloseWindow(windowHandle); HOperatorSet.ClearWindow(windowHandle); } } ``` 这只是一个简单的示例,您可以根据自己的需求调用更多的Halcon功能和算法。请注意,Halcon具有非常丰富的功能,我们只是展示了其中的一部分。 希望这对您有所帮助!如果您有任何进一步的问题,请随时提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值