Halcon笔记

HALCON中存在两类基本变量:图像变量(iconic data)和控制变量(control data),其中图像变量包括image, regionXLD(extended line description) contours,控制变量包括integers, strings, handles等。

Region:为某些附和要求性质的像素的子集,或者说一些被选择的图块区域s,region大小不受图像限制,类似于游程编码,可用于压缩,eg:用a2b3c4代表aabbbcccc,编码如图

 

HALCON算子中的四种参数被三个冒号依次隔开:图像输入参数,图像输出参数,控制输入参数,控制输出参数。一个算子中可能不会包含所有的这四种参数,但是参数的次序不会变化。也就是无参数时冒号仍然存在,另外,HALCON中的输入参数不会被算子更改,只被算子使用。

threhold(Image : Region : MinGray, MaxGray : )使用全局阈值分割图片,即二值化;

connection(Region : ConnectedRegions : : )计算整个区域类连接的区域

select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )根据特征选择区域,即按条件筛选区域

fill_up (SelectedRegions, PlateRegion)填补区域空洞

gen_contour_region_xld(Regions : Contours : Mode : )生成区域轮廓

segment_contours_xld(Contours : ContoursSplit : Mode, SmoothCont, MaxLineDist1, MaxLineDist2 : )将轮廓分割成线圆弧和椭圆弧

regress_contours_xld(Contours : RegressContours : Mode, Iterations : )计算出轮廓的线性回归线参数,

select_contours_xld(Contours : SelectedContours : Feature, Min1, Max1, Min2, Max2 : )根据特征选择轮廓,如果一些特征计算需要与regress_contours_xld配合使用

select_obj(Objects : ObjectSelected : Index : )根据索引取出数组中的某个值

get_contour_xld(Contour : : : Row, Col)获取轮廓的坐标

intersection_lines( : : Line1Row1, Line1Column1, Line1Row2, Line1Column2, Line2Row1, Line2Column1, Line2Row2, Line2Column2 : Row, Column, IsOverlapping)计算两线的交点

distance_pp( : : Row1, Column1, Row2, Column2 : Distance)计算两点的距离

line_orientation( : : RowBegin, ColBegin, RowEnd, ColEnd : Phi)计算线的方向

measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)提取出垂直于一个矩形或圆弧的直边,这个矩形或圆弧一般覆盖在这个检测范围,与gen_measure_rectangle2和gen_measure_arc配合使用

erosion_circle(Region : RegionErosion : Radius : )用圆结构体腐蚀一个区域

reduce_domain(Image, Region : ImageReduced : : )缩小图像的范围,输出是图形

edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )亚像素边缘提取

fit_ellipse_contour_xld 用椭圆和椭圆弧去拟合轮廓

### Qt与Halcon集成使用 #### Halcon与Qt环境配置 为了使Halcon能够顺利运行在基于Qt的应用程序中,需先完成两者之间的兼容设置。由于Halcon支持Linux系统,并且QT也具备跨平台特性,在嵌入式Linux环境下可以实现两者的融合[^2]。 ```cpp // main.cpp #include <QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } ``` #### 创建显示窗口类 定义一个继承自`QWidget`的新类用于展示图像数据。此部件负责接收来自Halcon的数据并将其转换成适合Qt界面的形式呈现给用户。 ```cpp // widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> class Widget : public QWidget { public: explicit Widget(QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *); }; #endif // WIDGET_H ``` ```cpp // widget.cpp #include "widget.h" #include <QPainter> extern Hlong window_handle; // 声明外部变量来保存HALCON窗口句柄 Widget::Widget(QWidget *parent): QWidget(parent){ } void Widget::paintEvent(QPaintEvent *) { QPainter painter(this); // 将 HALCON 图像绘制到当前控件上... // 这里省略具体绘图逻辑,实际项目应根据需求补充这部分内容 } ``` #### 主窗体设计 构建应用程序的主要框架结构,包括菜单栏、工具条以及状态栏等功能组件的设计工作。通过这些UI元素可以让用户体验更加友好便捷的操作流程。 ```cpp // mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_actionOpen_triggered(); // 打开文件槽函数声明 private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H ``` ```cpp // mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_actionOpen_triggered(){ QString fileName = QFileDialog::getOpenFileName(this, tr("打开图像"), "", tr("Images (*.png *.xpm *.jpg)")); if (!fileName.isEmpty()){ // 使用Halconc读取并处理图像... // 此处应该加入具体的Halcon代码片段 update(); // 刷新界面以反映最新变化 } } ``` 以上展示了如何创建基本的Qt GUI工程并与Halcon相结合的基础方法。需要注意的是,上述例子仅提供了一个大致思路,对于特定应用场景可能还需进一步调整优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值