首页 > 其他分享 >Halcon基础学习(一)

Halcon基础学习(一)

时间:2023-04-23 20:11:25浏览次数:32  
标签:控件 HTuple 代码 基础 CircuitBoard 学习 width 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

标签:控件,HTuple,代码,基础,CircuitBoard,学习,width,Halcon
From: https://www.cnblogs.com/LtWf/p/17347589.html

相关文章

  • XML学习
    XML学习什么是XML?XML指可扩展标记语言(ExtensibleMarkupLanguage)。XML是一种很像HTML的标记语言。XML的设计宗旨是传输数据,而不是显示数据。XML标签没有被预定义。您需要自行定义标签。XML被设计为具有自我描述性。XML是W3C的推荐标准。XML和HTML之间的差异XML不......
  • 基础题:百钱买百鸡(延伸题)
    有30人,可能包括男人、女人、小孩,他们在一饭店共消费50先令,其中每个男人花3先令,每个女人花2先令,每个小孩花1先令,求男人、女人、小孩各多少人?(此题就是换了个名词的百钱买百鸡) 这是个基础题,但是我经常学到后面忘记前面这种需要带点脑子的基础题,所以写做了一期笔记。我总结了......
  • 个人对于二分图匹配的学习记录
    二分图匈牙利算法下面展示的是dfs实现的写法。//洛谷P3386二分图最大匹配匈牙利算法#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1505;constintM=50005;inthead[N],eid;structEdge{ intv,w,next;}e[M<<1];v......
  • nginx学习笔记
    开始简介Nginx是一款高性能的开源Web服务器和反向代理服务器,它能够提供可扩展性、高可用性和高性能。优点更快单次请求更快,高峰期也更快高扩展性极具扩展性,它由多个不同功能、不同层次、不同类型且耦合度极高的模块组成,这种低耦合的设计,造就了它庞大的第三方模块高可......
  • 深度学习样本绘制注意事项
    在绘制深度学习样本的时候,部分初学者总是用绘制监督分类样本的方法绘制深度学习样本,在图像上随意绘制样本,这种绘制样本的方法不适用于深度学习样本绘制。如下为错误的示例:深度学习样本绘制应遵循“全、多、精”三个原则:样本子区域选取,应该全面覆盖多种地物类型。绘制样本尽......
  • 「学习笔记」2-SAT问题
    SAT是适定性\(\text{(Satisfiability)}\)问题的简称。一般形式为k-适定性问题,简称k-SAT。而当\(k>2\)时该问题为NP完全的。所以我们只研究\(k=2\)的情况。2-SAT,简单的说就是给出\(n\)个集合,每个集合有两个元素,已知若干个\(<a,b>\),表示\(a\)与\(b\)矛盾(其中......
  • RxDart框架学习
    一、RxDart是什么?RxDart是一个响应式编程框架,是基于ReactiveX的响应式函数编程库,ReactiveX是一个强大的库,通过使用可观察的序列来编写异步的程序。它突破了语言以及平台的限制,使我们在写异步程序的时候更简洁。ReactiveX开发过多个语言下的响应式框架,比较有名的就是RxJava、R......
  • 自学Vue基础笔记
    ......
  • Markdowm学习
    #Markdowm学习标题##二级标题###三级标题#字体**Hello,world!***Hello,world****Hello,worid!***~~Hello,world!~~#引用>##分割线---##图片![截图](E:\新建文件夹(2)\屏幕截图2022-11-12165730.png)![图片]()##超链接[点击跳转](http://m.jrj.com.cn/......
  • Halcon图像滤波&中值滤波&&高斯滤波&图像加减
    均值滤波:mean_image算子:mean_image(Image : ImageMean : MaskWidth, MaskHeight :)示例:mean_image(Image5,ImageMean1,3,3)Image5(输入对象):输入灰度图像ImageMean1(输出对象):输出均值滤波后的灰度图像3(输入控制参数1):均值矩阵的宽,数值通常为奇数,数值越大效果越明显3(输入控制......