Halcon基础学习(一)

Halcon基础学习(一)

初见

目标:

提取出U4的位置坐标

image-20230423175826806

结果:

image-20230423175751040

编程逻辑

  1. 读取图片

  2. 按照RGB3通道处理图片

  3. 使用中值滤波

  4. 使用灰度滤波

  5. 使用二值化滤波

  6. 组件区域分割

  7. 使用特征直方图设置上下限

  8. 直到过滤到唯一一个以后,使用区域选择工具

  9. 在新打开的图片上面绘制十字叉

编程实现

read_image (CircuitBoard, 'E:/halconTest/aa.jpg')
//三通道彩色图像分离
decompose3 (CircuitBoard, Image1, Image2, Image3)
// 中值滤波器
median_image (Image3, ImageMedian, 'circle', 5, 'mirrored')
// 扩展最大灰度值
scale_image (ImageMedian, ImageScaled, 1.8, 0)
// 二进制阈值
binary_threshold (ImageScaled, Region, 'smooth_histo', 'light', UsedThreshold)
    
// region特征筛选
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1252.32, 1994.43)
// 存在两个区域,再次过滤一下
select_shape (SelectedRegions, SelectedRegions1, 'area', 'and', 1856.75, 1901.11)
    
// region的中心和坐标
area_center (SelectedRegions1, Area, Row, Column)
// 打开一个适应图像大小的窗口
dev_open_window_fit_image (CircuitBoard, 0, 0, -1, -1, WindowHandle)
// 显示图像
dev_display (CircuitBoard)
// 设置画笔线的宽度
dev_set_line_width (8)
// 在指定行和列的地方绘制十字叉
disp_cross (WindowHandle, Row, Column, 100, 0)

提取Halcon代码作为函数

把获取当前图片的行和列进行的方法进行提取

第一步 勾选,然后点击创建新函数

image-20230423180258971

image-20230423180347204

第二步 编辑创建新函数的信息

image-20230423180503281

在参数页面,删除不用的参数信息

image-20230423180547588

仅仅保留 输入参数:图片名称 、 输出参数:行号和列号

image-20230423180649409

导出当前工程库和代码文件

  1. 导出当前工程库

    工程库提供了Halcon引擎的调用方法

    image-20230423181155971

  2. 导出当前代码文件

    当前看到的Halcon代码实现

image-20230423181429840

image-20230423181447960

image-20230423182924482

文件说明:

  1. Out_Center 这个是项目库
  2. 042301.cs 是生成的Halcon转C#代码文件

使用 VisualStudio 进行编程

第一步:引入 Halcon控件

使用工具箱功能

image-20230423181922819

添加当前版本对应的Halcon控件

第二步:添加dll控件的引用

image-20230423182327163

第三步:引入先前的Halcon代码

  1. 先引入c#实现代码

    image-20230423182518577

  2. 引入项目库文件

    1. 引入c#文件

    image-20230423183046628

    1. 将Res文件夹下面的文件移动到VS项目的执行文件夹下面

      image-20230423183205467

      image-20230423183236105

第四步:编写具体代码

先做界面:

其中那个黑框Halcon控件,右边是两个button

image-20230423183424393

image-20230423183354533

获取图片的button如下(先读取图片,获取图片的尺寸,然后设置HWindow控件显示的图片尺寸):

        private void BtnGetImage_Click(object sender, EventArgs e)
        {
            HOperatorSet.ReadImage(out ho_CircuitBoard, "E:/halconTest/aa.jpg");
            HOperatorSet.GetImageSize(ho_CircuitBoard,out hv_width,out hv_height);
            
            HTuple width = hv_width;
            HTuple height = hv_height;

            HTuple width_start = 0;
            HTuple hight_start = 0;

            _window.SetPart(hight_start, width_start, height, width);

            _window.DispObj(ho_CircuitBoard);
        }

处理图标的button如下(从导出的库项目文件中使用封装的center_looking函数):

        private void BtnProcessImage_Click(object sender, EventArgs e)
        {
            Out_Center.center_looking(ho_CircuitBoard,out HTuple row,out HTuple column);
            _window.DispCross(row,column,50,0);
        }

为啥这么写,要学会去抄,在哪抄写?

看Halcon实现的c#代码里面的action()部分

先抄写 读取图片部分ReadImage,然后获取图片尺寸GetImageSize

然后抄写使用的参数的类

image-20230423195736597

image-20230423195414919

image-20230423195811052

最后程序的效果如下:

先点击读取按钮:

image-20230423200112443

再点击图像处理

image-20230423200139449

此时效果和Halcon处理的情况基本一致

可能出现的错误情况:

  1. dll版本报错:

    我目前使用的是x64版本

    image-20230423200357824

image-20230423200410751

image-20230423200422506

posted @ 2023-04-23 20:06  聆听微风  阅读(1309)  评论(0编辑  收藏  举报