文档库 最新最全的文档下载
当前位置:文档库 › Halcon结合C#二次开发读取图片并处理图片

Halcon结合C#二次开发读取图片并处理图片

Halcon结合C#二次开发读取图片并处理图片在Halcon12.0中的程序编辑器编辑程序:

read_image(Image,'E:/Tulips.jpg')

get_image_size(Image,Width,Height)

rgb1_to_gray(Image,GrayImage)

文件——导出

打开VS2010 新建项目名称WindowsFormsHalcon——确定

右键WindowsFormsHalcon——属性

更改目标框架为.NET Framework4

然后在“生成”选项下更改目标平台为Any CPU(其他均不用修改)

在工具箱栏右键——选择项

halcondotnet.dll——打开

出现如下界面——确定

在工具箱中出现控件HWindowControl

在Form1窗体中拖入控件HWindowControl,两个Button按钮控件,OpenFileDialog控件

在VS2010中打开之前导出的Halcon程序,修改程序后写入窗体程序如下:

using System;

using System.Collections.Generic;

using https://www.wendangku.net/doc/d613077137.html,ponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using HalconDotNet; //添加引用HalconDotNet

namespace WindowsFormsHalcon

{

public partial class Form1 : Form

{

HDevelopExport HD = new HDevelopExport(); //添加代码

string ImagePath;

public Form1()

{

InitializeComponent();

this.btnHandle.Enabled = false; //添加代码,读取图片前处理图片按钮是不可用的

}

//读取图片按钮操作

private void btnRead_Click_1(object sender, EventArgs e)

{

openFileDialog1.Filter = "JPEG文??件tt|*.jpg*|BMP文??件tt|*.bmp*|TIFF文??件tt|*.tiff*";

openFileDialog1.RestoreDirectory = true;

openFileDialog1.FilterIndex = 1; //设置对话框属性

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

ImagePath = openFileDialog1.FileName;

HD.ReadImage(hWindowControl1.HalconWindow, ImagePath); // void HDevelopExport.ReadImage(Htuple Window,string path)

this.btnHandle.Enabled = true; //读取图片后处理图片按钮可用

}

}

//处理图片按钮操作

private void btnHandle_Click_1(object sender, EventArgs e)

{

HD.ImagePro();

this.btnHandle.Enabled = false; //处理图片后处理图片按钮不可用

}

}

public partial class HDevelopExport

{

public HTuple hv_ExpDefaultWinHandle; //Htuple--Halcon tuple,tuple是Halcon特有的数据结构,可用于图形和控制变量,是与外界程序数据交互的通道

HObject ho_Image, ho_GrayImage;

// Main procedure

public void InitHalcon()

{

// Default settings used in HDevelop

HOperatorSet.SetSystem("do_low_error", "false");

}

//读取图片

public void ReadImage(HTuple Window, string path)

{

hv_ExpDefaultWinHandle = Window;

HOperatorSet.GenEmptyObj(out ho_Image);//创建一个空的tuple对象

ho_Image.Dispose();

HOperatorSet.ReadImage(out ho_Image, path);

HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);

}

//处理图片

public void ImagePro()

{

HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);

HOperatorSet.DispObj(ho_GrayImage, hv_ExpDefaultWinHandle);

ho_GrayImage.Dispose();

}

}

}

程序运行后点击“读取图片”选择图片路径出现如下界面:

点击“打开”

点击“处理图片”

halcon知识点

1. 无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异。什么原因引起? 初步诊断是,显示的时候调用的颜色查找表存在异常不是 default ,而是其它选项。此时可以通过查阅相关参数,调用set_system解决,也可以在编辑-》参数选择-》颜色查找表进行更改。 2. 裁剪图像;从图像上截取某段图像进行保存。如何实现该操作? 首先应该知道,region不具有单独构成图像的要素,他没有灰度值。有用过opencv的应该知道 ROI(感兴趣区域),设置好它后,对图像的大部分操作就转为图像的一个矩形区域内进行。类似的,halcon有domain 概念。首先设置好一个矩形区,然后使用 reduce_domain(是一个矩形区域)后,再使用crop_domain 就裁剪出图像。 3. 读入bmp,或tiff 图像显示该图不是bmp文件或不能读。原因是什么? 这个常有新手询问,画图,图像管理器都能打开,又或者是相机采集完直接存到硬盘。Halcon 读取图像在windows下面到最后是调用windows库函数实现读图功能。咱不清楚到底是怎么调用的。对于图像格式,在读图函数F1说明很细。基本 bmp 如果文件头不是bw还是bm(百度百科bmp格式查找,编写此处时无网络,后续可能忘记),就读不进来。其他规格欢迎补充。解决办法,如果是相机采集,就在内存直接转换(参见 halcon到VC.pdf 里面的halcon和bitmap互转);如果是采完的图片,大部分通过画图工具转换为 24位bmp格式,即可解决。 4.读入avi文件报错。

Halcon 通过 directshow或另一个格式解析视频,正常来说应该可以读入市面大部分视频,实际测试发现只能读入最标准的avi文件格式。如果需要临时处理,需要下格式工厂等工具转化为最标准的avi文件格式(论坛叶诺有发帖说明)。 5. Region 或 xld 筛选。 Halcon提供了丰富的region 和xld筛选方法。Region可以使用select_shape_xld,选择出符合要求的区域,如果不能满足还可以通过类似 region feature 这样关键字组合成的算子获取区域特征,然后通过 tuple 排序或相加减,再通过 tuple_find 确定是对应哪个区域的特征。同样的halcon也提供了 select_contours_xld 进行轮廓筛选。 6. Halcon分几类对象,每个类的功用是? Halcon总分俩大类,tuple和图标对象obj 。Tuple涵盖了对所有基础数据类型的封装,可以理解为她是halcon定义的数组类。Obj 是alcon定义图标类基类。衍生出了许多类型,其中 Region ,Xld,Image 其中最主要的类型。 7. F1说明,参数部分 -array 是什么意思? 该符号说明,该参数接受一组输入,对tuple就是一组tuple,对obj 就是通过concat_obj 或其它操作产生的一组obj元组。 8. 俩个相对方形物体的距离计算。 如果这俩个物体和背景对比清晰,最近的距离在俩条边下则可以再预处理之后进行如下操作:

halcon基础数据类型详解

halcon基础数据类型详解 #if defined(__CHAR_UNSIGNED__) || defined(__sgi) #define INT1 signed char /* integer, signed 1 Byte */ #define INT1_MIN SCHAR_MIN #define INT1_MAX SCHAR_MAX #else #define INT1 char /* integer, signed 1 Byte */ #define INT1_MIN CHAR_MIN #define INT1_MAX CHAR_MAX #endif #define UINT1 unsigned char /* integer, unsigned 1 Byte */ #define UINT1_MIN 0 #define UINT1_MAX UCHAR_MAX #define LONG_FORMAT _INT64_FORMAT typedef INT4_8 Hlong; typedef UINT4_8 Hulong; 看粗体部分,可以看到Hlong型在32位的机器上其实就是long型代表4个字节32位,在64位机器上有另一种定义 再来看看halcon中最重要的数据类型HTuple,在C++里面,halcon将HTuple类型封 装了类,其始祖类HRootObject,这个类相当于MFC里面的CObject,halcon从HRootObject 派生了HBaseArray,当然这两个类是虚基类,有一些方法需要我HTuple自己实现,当然也 有一些方法可以直接用的。这两个类在HCPPUtil里,可以看看。 HTuple类就是从HBaseArray派生,元组基类,相当于数组,具有如下的构造函数: HTuple(int l); HTuple(float f); HTuple(double d); HTuple(constchar *s);

Halcon

Halcon 目录 1、相机接入且拍摄 (2) 1.1 步骤 (2) 1.2 后续处理函数 (5) 2、相机标定 (7) 2.1标定步骤 (7) 3、手眼系统标定 (11) 3.1 标定步骤 (11) 4、图像坐标和机器臂坐标转换 (13) 4.1 转换步骤 (14) 5、模版匹配(基于形状) (19) 5.1 步骤 (19) 6、常见函数 (25) 6.1 图像分割 (25) 6.2 轮廓提取、处理 (31)

1、相机接入且拍摄 1.1 步骤 (1)连接相机 open_framegrabbe(Name, HorizontalResolution, VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn, Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn, AcqHandle) 在算子窗口内输入函数名,填入参数后点击“确定”按钮即可将函数加入程序中。 注: Name: 图像采集设备的名称 可通过以下步骤确定: 1、在Halcon菜单栏里点击“窗口”,选择“打开算子窗口”。 (若算子窗口已打开则直接进入第二步) 2、在“输入算子或函数”栏内输入“open_framegrabbe” 回车后出现下图

3、在“参数”栏中的Name后点击即可自动检测连接的设 备(笔记本电脑摄像头检测后为’DirectShow’) 此参数若随意填写,可能导致程序报错 HorizontaResolution、VerticalResolution:预期的图像采集接口的水平分辨率和垂直分辨率 ImageWidth、ImageHeight:预期图像的宽度和高度部分StartRow、StartColumn:显示预期图像的开始坐标 Field:预期图像是一半的图像或者是完整图像 BitsPerChannel:每像素比特数和图像通道 ColorSpace:获取图像的输出形式(gray、raw、rgb、yuv、default)说明:此参数设置不同的值可以得到不同的图像效果,如设置

halcon学习笔记——实例篇 长度和角度测量+

halcon学习笔记——实例篇长度和角度测量实例二:长度和角度测量 素材图片: halcon代码: 1: *读取并截取图片 2: dev_close_window() 3: read_image (Image, 'D:/MyFile/halcon/长度和角度测量/图.png') 4: crop_rectangle1 (Image, ImagePart, 75, 0, 400, 400) 5: get_image_size (ImagePart, Width, Height) 6: dev_open_window (0, 0, Width, Height, 'black', WindowHandle) 7: dev_display (ImagePart) 8: 9: *获取图形的边界 10: threshold (ImagePart, Regions, 0, 112) 11: 12: *分离三角形和圆形

13: connection(Regions,ConnectedRegions) 14: sort_region(ConnectedRegions,SortedRegions,'upper_left','true','column') 15: select_obj(SortedRegions,Circle,1) 16: select_obj(SortedRegions,Triangle,2) 17: 18: *获取三角形各边的信息 19: skeleton(Triangle,TriangleSkeleton) 20: gen_contours_skeleton_xld(TriangleSkeleton,TriangleContours,1,'filter') 21: segment_contours_xld(TriangleContours,ContoursSplit,'lines_circles', 5, 4, 2) 22:select_contours_xld(ContoursSplit,SelectedContours, 'contour_length',100, 999, -0.5, 0.5) 23: fit_line_contour_xld (SelectedContours, 'tukey', -1, 10, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist) 24: 25: *计算三角形角度 26:angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], Angle1) 27:angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle2) 28:angle_ll (RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle3) 29: Angle1:=abs(deg(Angle1)) 30: Angle2:=abs(deg(Angle2)) 31: Angle3:=abs(deg(Angle3)) 32: 33: *获取圆的信息 34: area_center(Circle,AreaCircle, RowCircle, ColumnCircle) 35: 36: *计算圆心到三角形各边的距离 37: Distance := [] 38:for Index := 0 to 2 by 1 39:distance_pl (RowCircle, ColumnCircle, RowBegin[Index], ColBegin[Index], RowEnd[Index], ColEnd[Index], ThisDistance) 40: Distance := [Distance,ThisDistance] 41: endfor

Halcon学习2_图形图像数据结构

1·Image 在Halcon中,Image=Channel+Domain,其中,像素点放在channel矩阵中,根据ROI对Image进行描述。 2·Region 为某些符合要求性质的像素子集,或者说一些被选择的图块区域s,region大小不受图像限制,有fill和margin两种表达方式,可用于压缩。 *选择相应区域 select_shape(regions,output,'select type',..requirements) *计算相应区域的面积,中心坐标 area_center(regions,area,row,column) *不规则区域的转换 shape_trans(region,regiontrans,type) 3·图型变量XLD(eXtended Line Descriptions) XLD代表亚像素级别的轮廓或者多边形 *XLD的选择操作 select_shape_xld(XLD : SelectedXLD : Features, Operation, Min, Max : ) select_contours_xld(Contours : SelectedContours : Feature, Min1, Max1, Min2, Max2 : ) *计算xld的面积以及中心位置 //area_center_xld(XLD:::Area,row,column,pointOrder) *Xld 的拟合操作(fit_***_contour_xld) 把不完整的形状拟合完整 fit_line_contour_xld fit_circle_contour_xld fit_ellipse_contour_xld fit_rectangle2_contour_xld 4·读取照片方法 a·申明一个数组,分别保存路径 ImagePath:=[] ImagePath[0]:='D:/1.bmp' ImagePath[1]:='D:/2.bmp' ImagePath[2]:='D:/3.bmp' for i:=0 to 2 by 1 read_image(Image,ImagePath[i]) endfor

halcon与C#混合编程(三)数字识别

示例:数字识别要识别的图片: halcon源码: 1: *读取图片 2: read_image(Image,'D:/My数字识别/1.jpg') 3: 4: *图像处理 5: decompose3(Image, ImageR, ImageG, ImageB) 6: threshold (ImageG, Regions, 0, 183) 7: connection (Regions, Connection) 8: 9:select_shape (Connection, SelectedRegions, 'area', 'and', 1987.72, 7500) 10: 11: read_ocr_class_mlp('Document_0-9.omc',OCRHandle)

12: do_ocr_multi_class_mlp(SelectedRegions,ImageG,OCRHandle, Class, Confidence) halcon导出的C#代码: 1:// 2:// by HDevelop for HALCON/DOTNET (C#) Version 10.0 3:// 4:// This intended to be used with the HDevelopTemplate or 5:// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# 6: 7:using System; 8:using HalconDotNet; 9: 10:public partial class HDevelopExport 11: { 12:public HTuple hv_ExpDefaultWinHandle; 13: 14:// Main procedure 15:private void action() 16: { 17: 18:// Local iconic variables 19: 20: HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB; 21: HObject ho_Regions, ho_Connection, ho_SelectedRegions; 22: 23: 24:// Local control variables 25: 26: HTuple hv_OCRHandle, hv_Class, hv_Confidence; 27: 28:// Initialize local and output iconic variables 29: HOperatorSet.GenEmptyObj(out ho_Image); 30: HOperatorSet.GenEmptyObj(out ho_ImageR); 31: HOperatorSet.GenEmptyObj(out ho_ImageG); 32: HOperatorSet.GenEmptyObj(out ho_ImageB); 33: HOperatorSet.GenEmptyObj(out ho_Regions); 34: HOperatorSet.GenEmptyObj(out ho_Connection); 35: HOperatorSet.GenEmptyObj(out ho_SelectedRegions); 36: 37://读取图片 38: ho_Image.Dispose();

halcon知识点

1.无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异。什么原因引起? 初步诊断是,显示的时候调用的颜色查找表存在异常不是default,而是其它选项。此时可以通过查阅相关参数,调用set_system解决,也可以在编辑-》参数选择-》颜色查找表进行更改。 2.裁剪图像;从图像上截取某段图像进行保存。如何实现该操作? 首先应该知道,region不具有单独构成图像的要素,他没有灰度值。有用过opencv的应该知道ROI(感兴趣区域),设置好它后,对图像的大部分操作就转为图像的一个矩形区域内进行。类似的,halcon有domain概念。首先设置好一个矩形区,然后使用reduce_domain(是一个矩形区域)后,再使用 crop_domain就裁剪出图像。 3.读入bmp,或tiff图像显示该图不是bmp文件或不能读。原因是什么? 这个常有新手询问,画图,图像管理器都能打开,又或者是相机采集完直接存到硬盘。Halcon读取图像在windows下面到最后是调用windows库函数实现读图功能。咱不清楚到底是怎么调用的。对于图像格式,在读图函数F1说明很细。基本bmp如果文件头不是bw还是bm(百度百科bmp格式查找,编写此处时无网络,后续可能忘记),就读不进来。其他规格欢迎补充。解决办法,如果是相机采集,就在内存直接转换(参见halcon到里面的halcon和bitmap互转);如果是采完的图片,大部分通过画图工具转换为24位bmp格式,即可解决。 4.读入avi文件报错。Halcon通过directshow或另一个格式解析视频,正常来说应该可以读入市面大部分视频,实际测试发现只能读入最标准的avi文件格式。如果需要临时处理,需要下格式工厂等工具转化为最标准的avi文件格式(论坛叶诺有发帖说明)。 5. Region或xld筛选。 Halcon提供了丰富的region和xld筛选方法。Region可以使用 select_shape_xld,选择出符合要求的区域,如果不能满足还可以通过类似

Halcon识别一维码的代码实例

Stage I's hdev的代码实例 =============================================================================== * Autodiscrimination A.hdev * * Code generated by Image Acquisition 03 * 获取条形码,并计算及显示解码时间,并从规定读取的条码类型范围中读取被解码的条码类型也可设置成不规定条码类型即自动识别,但会增加解码时间,甚至出现误读的情况。 * 可读取多个不同类型的条码,并且多个条码用不同颜色的区域框区分,且读取出来的信息也以相应的颜色做区分 dev_close_window () dev_open_window (0, 0, 600, 600, 'black', WindowHandle) *先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle; *相对于界面左上角第0行、第0列,大小为300×300像素,颜色为黑色。 open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', 'Gsou USB2.0 Camera', 0, -1, AcqHandle) * 打开帧接收器(图像采集设备,如摄像头,工业相机等),参数(Parameter)详见这个算子注意,采集器名称不同要更改,或者用助手获取也可以。grab_image_start (AcqHandle, -1) while (true) grab_image_async (Image, AcqHandle, -1) *开始条形码识别 create_bar_code_model ([], [], BarCodeHandle) *必备的创建条码解码的开头,下面有一段结束代码 dev_update_var ('off') dev_update_pc ('off') dev_update_window ('off') * 刷新窗体 set_display_font (WindowHandle, 14, 'mono', 'true', 'false')

halcon单相机标定详细说明

相机标定 1 相机标定基本原理 1.1 相机成像模型 目前大多数相机模型都是基于针孔成像原理建立的,因为针孔成像原理简单,并且能满足建模的要求。除此之外还有基于应用歪斜光线追踪法和近轴光线追踪法的成像模型[1]。针孔成像虽然已经展示出了相机的成像原理,但是由于针孔成像是理想的物理模型,没有考虑相机本身的尺寸、镜头与相机轴心的偏斜等因素的影响,因此精度很低,不能满足工业机器视觉的要求。为了使相机模型能高精度的反应相机的实际成像过程,需要再针孔成像模型的基础上考虑镜头畸变等的因素。 图1 针孔成像 基于针孔成像原理建立的相机的成像模型,如下图所示。在相机的成像模型中,包含有几个坐标系分别是世界坐标系、相机坐标系、图像坐标系,相机的成像过程的数学模型就是目标点在这几个坐标系中的转化过程。 图2 针孔成像模型 (1)世界坐标系(X w,Y w,Z w),就是现实坐标系,是实际物体在现实世界中的数学描述,是一个三维的坐标空间。 (2)摄像机坐标系(X c, Y c),以针孔相机模型的聚焦中心为原点,以摄像机光学轴线为Z c轴 (3)图像坐标系:分为图像像素坐标系和图像物理坐标系 为了便于数学描述将图像平面移动到针孔与世界坐标系之间。如下图所示。

图3 将相机平面移至针孔与目标物体之间后的模型 1.2 坐标系间转换 从世界坐标系到相机坐标系: P(X c ,Y c ,Z c )=R(α,β,γ)?P(X w ,Y w ,Z w )+T 每一个世界坐标的对象都可以通过旋转和平移转移到相机坐标系上。将目标点旋转θ角度,等价于将坐标系方向旋转θ。如下图所示,是二维坐标的旋转变换,对于三维坐标而言,旋转中绕某一个轴旋转,原理实际与二维坐标旋转相同。如果,世界坐标分别绕X ,Y 和Z 轴旋转α,β,γ,那么旋转矩阵分别为R (α),R (β),R (γ) 图4 坐标旋转原理 R (α)=[10 00cosα ?sinα0sinαcosα] (1-1) R (β)=[cosβ 0sinβ0 10?sinβ 0cosβ ] (1-2)

Halcon 笔记

Halcon学习笔记 1、Halcon的自我描述 Program Logic Each program consists of a sequence of HALCON operators The program can be structured into procedures The sequence can be extended by using control operators like if, for, repeat, or while The results of the operators are passed via variables No implicit data passing is applied Input parameters of operators can be variables or expressions Output parameters are always variables HDevelop has no features to design a graphical user interface An HDevelop program is considered as a prototypic solution of the vision part of an application HDevelop is typically not used for the final application 由此可以看出,Halcon的定位是一个类库,有着完整、快速实现函数,同时提供了HDevelop 作为快速开发的图形化(IDE)界面;但是,Halcon程序并不是一个完整的最终应用软件,它没有用户界面,也不提供显示的数据(公用的数据格式)。 Halcon的初学者也应当从参考Halcon的程序入手,熟悉Halcon类库,也即HDevelop-Based Programming;在此基础上,进入ORClass-Oriented Programming。这也是Halcon推荐的开发方式: The vision part is solved with HDevelop,and the application is developed with C++ or Visual Basic。 2、HDevelop界面的学习 通过阅读Halcon的PPT,学到了下面一些有用的信息: 文件——浏览示例,可以看到很多有用的例子; 程序窗体中,可以浏览与编辑Procedues(过程),这个其实就是自定义函数咯~还可以自己修改这些过程,并添加说明文档; F4——将函数语句注释掉;F3——激活; 本地过程(Local Procedue)与外部过程(Externel Procedue) 3、基本语法结构 Halcon的语法结构 类似于Pascal 与Visual Basic,大部分的语句是Halcon提供的算子,此外也包含了少部分的控制语句; 不允许单独声明变量; 提供自动的内存管理(初始化、析构及OverWrite),但句柄则需要显示释放; C++(算子模式) 通过代码导出,以C++为例,默认导出为算子型的语法结构,而非面向对象的;在此模式下,全部函数声明为全局类型,数据类型只需要用Hobject、HTuple两类类型进行声明; C++(面向对象) 可以以面向对象的方式重写代码,也即利用类及类的成员函数; 在这种模式下,控制变量的类型仍未HTuple,而图形数据可以由多种类型,如HImage等;其他语言(略)

视觉halcon学习源代码

*创建模板是要注意以下问题 *'standard_recognition'标准模式 *'enhanced_recognition'加强模式 *'maximum_recognition' 最强模式(初学者建议使用) *'QR Code'(小编用的) *'Data Matrix ECC 200' *'PDF417' *敬请关注微信公众号(机器人配视觉ind400),可获取更多学习资料 *分享是件快乐的事,请把公众号分享给有需要的人。 dev_close_window () dev_open_window (0, 0, 520, 520, 'black', WindowHandle) dev_update_off () *创建模板 create_data_code_2d_model ('QR Code', 'default_parameters', 'maximum_recognition', DataCodeHandle) *读取图片 read_image (Ind400, 'ind400.png') *识别模板 find_data_code_2d (Ind400, SymbolXLDs, DataCodeHandle, 'train', 'all', ResultHandles, DecodedDataStrings) *显示结果 dev_display (Ind400) disp_message (3600, '机器人配视觉ID号', 'window', 12, 12, 'black', 'true') disp_message (3600, DecodedDataStrings, 'window', 33, 50, 'black', 'true') *销毁模板 clear_data_code_2d_model (DataCodeHandle) dev_update_on () 加微信相互学习交流:guangguang5061

HALCON入门(1)初探HDevelop

HALCON入门(1)—初探HDevelop 整理编辑:YWB HALCON是先进的图像处理算法库。除了完备高速的算法,HALCON还提供便捷的开发环境——HDevelop。它可以帮助我们快速的完成算法验证以及实施。 1HDevelop的界面布局 HDevelop界面可分为菜单栏、工具栏、图形窗口、变量窗口、算子窗口和代码窗口五个部分。 2菜单栏 2.1文件 文件菜单主要涵盖了文件的保存、读取以及相关操作。其中常用的操作包括读取图像、导出、属性。

2.1.1读取图像 读取图像可以帮助我们直接将加载图像代码添加到代码窗口中。 2.1.2导出 导出是我们在算法集成过程中最常用的一个选项。通过对开发语言的选择,HDevelop可以帮助我们将当前脚本转换为任意HALCON 支持的语言类型。目前HDevelop所支持的开发语言类型包括C、C++、https://www.wendangku.net/doc/d613077137.html,以及C#。

2.1.3属性 HALCON的运行版支持分模块购买,您可以在属性中看到您所使用的模块并进行相应的定制型购买。在属性对话框的“使用的模块”选项卡中,左侧为模块类型,右侧为正在使用标志,即右侧哪一盏灯被点亮则我们目前的程序就使用了哪一个模块。 2.2编辑 编辑菜单中主要以代码的复制粘贴等操作为主。菜单中的“参数选择”选项可以帮助我们进行诸如程序语言,字体等主界面相关参数的设置。 2.3执行 执行菜单包含了程序调试过程中的所有选项,包括程序的执行、跳转、断点的激活与清除等操作。

2.4可视化 可视化菜单包括图像窗口显示相关的所有操作。显示颜色的数目、显示区域是否填充、显示边缘的绘制宽度等都可以通过菜单中的选项进行设置。 2.5函数 HDevelop支持将若干HALCON算子封装为用户自定函数。函数的创建、接口修改以及管理等一系列操作选项大家均可在此处找到。 2.6算子 HALCON是一个拥有2000+算子的庞大算法库,在算子菜单中我们可以快速的通过算子分类找到相关的算法。 2.7建议 通过“建议”菜单中的选项,我们可以找到与当前算子相关的或是该算子常用的后续算子。

基于Halcon的研究

vc 使用halcon 使用hdevelop 导出halcon 程序的c++代码之后,比如 1 read_image (image, 'C:/Documents and Settings/Administrator/桌面/vision/IMG_20121015_091436.bmp') 2 rgb1_to_gray (image, GrayImage) 3 dev_set_color('blue') 4 *bin_threshold (GrayImage, Region) 5 threshold(GrayImage,Region,100,255) 6 area_center (Region, Area, Row, Column) 生成c++代码 01 /////////////////////////////////////////////////////////////////////////////// 02 // File generated by HDevelop for HALCON/C++ Version 10.0 03 /////////////////////////////////////////////////////////////////////////////// 04 05 06 07 #include "HalconCpp.h" 08 09 10 11 using namespace Halcon; 12 13 14 #ifndef NO_EXPORT_MAIN 15 // Main procedure 16 void action() 17 { 18 using namespace Halcon; 19 20 // Local iconic variables 21 Hobject image, GrayImage, Region; 22 23 24 // Local control variables 25 HTuple Area, Row, Column;

Halcon学习之二:摄像头获取图像和相关参数

Halcon学习之二:摄像头获取图像和相关参数 1、close_all_framegrabbers ( : : : ) 关闭所有图像采集设备。 2、close_framegrabber ( : : AcqHandle : ) 关闭Handle为AcqHandle的图像采集设备。 3、open_framegrabber ( : : Name, HorizontalResolution, VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn, Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn : AcqHandle ) 打开图像采集设备 参数信息: Name:图像采集设备的名称 HorizontalResolution和VerticalResolution:分别指预期的图像采集接口的水平分辨率和垂直分辨率 ImageWidth和ImageHeight:指预期图像的宽度部分和高度部分。 StartRow和StartColumn:指显示预期图像的开始坐标 Field:预期图像是一半的图像或者是完整图像 BitsPerChannel:每像素比特数和图像通道 ColorSpace:输出的色彩格式的抓住图像{gray、raw、rgb、yuv、default} Generic:通用参数与设备细节部分的具体意义。 ExternalTrigger:是否有外部触发 CameraType:使用相机的类型 Device:图像获取设别连接到的设备 Port:图像获取设别连接到的端口 LineIn :相机输入的多路转接器 AcqHandle:图像获取设备的Handle 4、grab_image ( : Image : AcqHandle : ) 获取AcqHandle的图像采集设备的Image。 5、get_framegrabber_param ( : : AcqHandle, Param : Value ) 查询AcqHandle的图像采集设备的特殊参数 Param{name ∈、port、revision、bits_per_channel, camera_type、color_space、device、 ?eld、generic、external_trigger、grab_timeout、horizontal_resolution、image_available、image _height、image_width、line_in、start_column、start_row、volatile、vertical_resolution、contin uous_grabbing、} 6、info_framegrabber ( : : Name, Query : Information, ValueList ) 查询指定的图像采集接口的信息。 Name为图像采集设备的名称 Query为需要查询的参数名称 Information是指输出的文本信息

halcon例程解读3

例程解读3 二维物体识别/ball_seq.hdev dev_update_off () ImageNames := 'die/' + ['die_02','die_03','die_04','die_07'] ***图片名字 dev_set_colored (12) ***设置颜色数量 read_image (Bond, ImageNames[0]) ***读取图片 get_image_size (Bond, Width, Height) ***获得图片大小 dev_close_window () ***关闭窗口 dev_open_window (0, 0, Width, Height, 'black', WindowHandle) ***按指定大小打开窗口 set_display_font (WindowHandle, 16, 'mono', 'true', 'false') ***设置窗口字体 dev_set_draw ('margin') ***region显示边框 dev_set_line_width (3) ***设置线宽 NumImages := |ImageNames| ***获得图像数量 for I := 0 to NumImages - 1 by 1 //循环读取图像 read_image (Bond, ImageNames[I]) ***读图 dev_display (Bond) ***显示 min_max_gray (Bond, Bond, 0, Min, Max, Range) ***获得部分图像的最大灰度值与最小灰度值 threshold (Bond, Bright, Max - 80, 255) ***二值化相对亮的部分 shape_trans (Bright, Die, 'rectangle2') ***形状转换任意方向性的矩阵 dev_display (Die) ***显示矩形 reduce_domain (Bond, Die, DieGrey) ***取得指定区域的图像 min_max_gray (Die, Bond, 0, Min, Max, Range)

HALCON入门(3)HDevelop之Blob分析

HALCON入门(3)HDevelop之Blob分析 整理编辑:YWB 本次介绍HDevelop常用工具的使用技巧之Blob分析,通过开发环境为我们提供的工具,生成常用代码,大大提高我们算法开发工作的效率。 1灰度直方图 在进行所有工作之前,先让我们加载一副图像。通过代码“resd_image(Image,'tooth_rim')”,我们加载HALCON自带示例图像“tooth_rim”,点击“打开直方图”按钮,我们将在随后打开的“灰度直方图”对话框中看到当前图像的直方图。在直方图中横坐标为图像所包含的灰度级,纵坐标为在图像中某个灰度级所包含的像素数目。

阈值分割-连通域计算-插入代码: 勾选“阈值”操作后,通过拖动直方图中绿色和红色的刻线可以实现可视化的阈值分割处理。 勾选“连接”复选框,可对已分割好的阈值进行连通域计算。 点击插入代码,可将我们之前的操作转换为代码并添加到程序中。 关闭直方图工具,点击快捷键“F5”或工具栏“运行”按钮即可查看刚生成代码的处理结果。

2特征直方图 一般,在图像处理的常用算法中除了阈值分割我们还会用到Blob 分析,例如通过面积、周长、圆度等参数对所获取的连通域进行筛选。这一功能可以通过HDevelop工具栏中的“特征直方图”工具完成。 根据区域特征筛选: 使能“特征”筛选后我们就可以拖拽绿色和红色刻线对已生成的

一组区域进行筛选。其中“输入和输出”子项下的“颜色”为被选中图像显示颜色。 在实际应用中有时会出现被选中颜色和待选区域原有颜色重复或相近的情况。我们可以通过减少显示显色数目和更换选中区域颜色来避免这一问题。

halcon与C混合编程数字识别

示例:数字识别 要识别的图片: halcon源码: 1: *读取图片 2: read_image(Image,'D:/MyFile/halcon/数字识别/') 3:? 4: *图像处理 5: decompose3(Image, ImageR, ImageG, ImageB) 6: threshold (ImageG, Regions, 0, 183) 7: connection (Regions, Connection) 8:? 9:select_shape (Connection, SelectedRegions, 'area', 'and', , 7500) 10:? 11: read_ocr_class_mlp('',OCRHandle) 12: do_ocr_multi_class_mlp(SelectedRegions,ImageG,OCRHandle, Class, Confidence) halcon导出的C#代码:

1:pg*|BMP文件|*.bmp*|TIFF文件|*.tiff*"; 30:? 31: = true; 32:? 33: = 1; 34:? 35:if () == 36:? 37: { 38:? 39: ImagePath = ; 40: 41: , ImagePath); 42: 43: = true; 44: 45: } 46: } 47:? 48:private void btnRecognitionNumber_Click(object sender, EventArgs e) 49: { 50: (); 51: = 52:? 53: = false; 54: } 55: } 56:? 57://halcon导出的类 58:public partial class HDevelopExport 59: { 60:public HTuple hv_ExpDefaultWinHandle; 61:? 62: HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB; 63: HObject ho_Regions, ho_Connection, ho_SelectedRegions; 64:? 65:? 66:// Local control variables 67: HTuple hv_OCRHandle, hv_Confidence; 68:public HTuple hv_Class; 69:? 70:public void InitHalcon() 71: { 72:// Default settings used in HDevelop

相关文档
相关文档 最新文档