当前位置:文档之家› 跟我学机器视觉-HALCON学习例程中文详解-测量圆环角宽间距

跟我学机器视觉-HALCON学习例程中文详解-测量圆环角宽间距

跟我学机器视觉-HALCON学习例程中文详解-测量圆环角宽间距
跟我学机器视觉-HALCON学习例程中文详解-测量圆环角宽间距

跟我学机器视觉-HALCON学习例程中文

详解-测量圆环脚宽间距

* This example program demonstrates the basic usage of a circular measure object.

* Here, the task is to determine the width of the cogs.

*首先读取图像,获取图像的宽度和高度

* First, read in the image and initialize the program.

read_image (Image, 'rings_and_nuts')

dev_close_window ()

dev_open_window_fit_image (Image, 0, 0, 640, 640, WindowHandle)

set_display_font (WindowHandle, 14, 'mono', 'true', 'false')

get_image_size (Image, Width, Height)

*读到的图像如下:

* Extract the rings.

*******************自动阈值分割,此时为一个区域,如图**************************** bin_threshold (Image, Region)

connection (Region, ConnectedRegions)

***************************填充区域内的孔洞,效果如图************************** fill_up (ConnectedRegions, RegionFillUp)

*******************计算区域的紧性,机器视觉算法与应用第168页***************** compactness (RegionFillUp, Compactness)

************通过紧性特征进行区域筛选,在1.5到2.5之间的为需要测量的圆环******** for i := 0 to |Compactness|-1 by 1

if (Compactness[i] > 1.5 and Compactness[i] < 2.5)

select_obj (RegionFillUp, ObjectSelected, i+1)

*

* Determine the size and position of the rings.

**************计算选择区域的最小外接圆和最大内接圆,存储圆心和半径************** *两个半径的均值作为测量圆弧半径,AnnulusRadius 为测量圆弧宽度******************* smallest_circle (ObjectSelected, Row, Column, RadiusMax)

inner_circle (ObjectSelected, CenterRow, CenterCol, RadiusMin)

Radius := (RadiusMax+RadiusMin)/2.0

AnnulusRadius := (RadiusMax-RadiusMin)/4.0

*

* Determine the position between two cogs.

* This position is then used as the start angle for the circular ROI.

********多边形近似逼近区域,存储多边形角点的坐标值,机器视觉算法与应用第252页get_region_polygon (ObjectSelected, AnnulusRadius, RowsBorder, ColumnsBorder)

********计算每个角点到最大内接圆圆心的距离,然后进行排序********************* SqrDistanceBorder := (RowsBorder-CenterRow)*(RowsBorder-CenterRow) + (ColumnsBorder-CenterCol)*(ColumnsBorder-CenterCol)

****************************************从小到大排序*************************** tuple_sort_index (SqrDistanceBorder, Indices)

****************计算直线的角度,圆心和到圆心最近的多边形角点所确定的直线******** ********************************将该角度作为测量圆弧的起始角度***************** line_orientation (CenterRow, CenterCol, RowsBorder[Indices[0]], ColumnsBorder[Indices[0]], AngleStart)

*************我认为检测圆开始角度直接设为0度也可以*************************** * AngleStart := rad(0)

AngleExtent := rad(360)

* Create the measure for a circular ROI.

Interpolation := 'bilinear'

**********************生成测量圆弧,为完整圆环(360度)************************* gen_measure_arc (CenterRow, CenterCol, Radius, AngleStart, AngleExtent, AnnulusRadius, Width, Height, Interpolation, MeasureHandle)

*

* Determine all edge pairs that have a negative transition, i.e., edge pairs

* that enclose dark regions.

* Note that the output parameters IntraDistance and InterDistance are given as arc lengths.

Sigma := 1.0

Threshold := 30

Transition := 'negative'

Select := 'all'

********进行边缘对测量,RowEdgeFirst, ColumnEdgeFirst,RowEdgeSecond, ********ColumnEdgeSecond为检测圆弧检测到的边界的中心点的坐标,IntraDistance, ********InterDistance分别为边缘对间的距离和边缘对的弧线距离********************* ********如有疑问,请咨询qiuqiu:1613985351****************************** measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)

*

* Determine the number of cogs.

NumCogs := |RowEdgeFirst|

*

* Determine the linear distance between the two edges of each edge pair ('Linear cog size')

* as well as the angular distance of the edge pairs ('Angular cog size').

**************************计算边缘对的直线距离和弧度*************************** distance_pp (RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond, LinearDistance)

AngularDistance := deg(IntraDistance/Radius)

Visualize the determined edges.

******************将边缘对的起始终止点画出,并显示测量结果**********************

gen_empty_obj (Crosses)

for i := 0 to |RowEdgeFirst|-1 by 1

gen_cross_contour_xld (Cross, RowEdgeFirst[i], ColumnEdgeFirst[i], AnnulusRadius*2.0, atan2(RowEdgeFirst[i]-CenterRow,ColumnEdgeFirst[i]-CenterCol)) concat_obj (Crosses, Cross, Crosses)

gen_cross_contour_xld (Cross, RowEdgeSecond[i], ColumnEdgeSecond[i], AnnulusRadius*2.0, atan2(RowEdgeSecond[i]-CenterRow,ColumnEdgeSecond[i]-CenterCol)) concat_obj (Crosses, Cross, Crosses)

endfor

dev_display (Image)

dev_set_line_width (4)

dev_set_color ('black')

dev_display (Crosses)

dev_set_line_width (1)

dev_set_color ('white')

dev_display (Crosses)

*

* Display the measured size of the cogs.

disp_message (WindowHandle, 'Number of cogs: '+|RowEdgeFirst|+' ', 'window', 260, 10, 'black', 'true')

disp_message (WindowHandle, 'Mean cog size: ', 'window', 286, 10, 'black', 'true')

disp_message (WindowHandle, '- Arc length: '+mean(IntraDistance)$'.2f'+' +/- '+deviation(IntraDistance)$'.2f'+' pixel', 'window', 310, 10, 'black', 'true')

disp_message (WindowHandle, '- Linear: '+mean(LinearDistance)$'.2f'+' +/- '+deviation(LinearDistance)$'.2f'+' pixel', 'window', 334, 10, 'black', 'true')

disp_message (WindowHandle, '- Angular: '+mean(AngularDistance)$'.2f'+' +/- '+deviation(AngularDistance)$'.2f'+' deg ', 'window', 358, 10, 'black', 'true')

*

* Close the measure

close_measure (MeasureHandle)

disp_continue_message (WindowHandle, 'black', 'true')

stop ()

endif

***************************for循环,测量其他圆环******************************** endfor

Halcon机器视觉实验指导书

机器视觉软件HALCON 实验指导书 目录 实验1 HALCON 概述,应用范例 实验2 HDevelop介绍,操作编程范例 实验3 HALCON编程接口,高级语言编程 实验4 HALCON数据结构,采集硬件接口 实验5 HALCON采集硬件配置,图像采集 实验6 HALCON二维测量,配准测量与识别定位 实验7 HALCON一维测量,尺寸测量 实验8 HALCON三维测量,3D重建测量 实验1 HALCON 概述,应用范例 实验2 HDevelop介绍,操作编程范例 1 邮票分割 文件名: stamps.dev 第一个例子进行文件分析任务。图5.1展示了部分邮票目录页。它描述了两种不同的邮票:以图形描述为主和以文字描述为主。 为了使用这个例子,必须把文字描述转化为计算机所能理解的形式。你可能使用OCR编程方式,你很快发现由于邮票的图形描述会导致大多数的可使用模块产生错误。于是另一项任务必须要进行预处理:对所有的邮票进行转化(例如,把邮票转化为灰色有价值的纸),这样就可以使用OCR处

理邮票的剩余部分了。 当创造一个应用程序来解决这种问题,对要处理的对象进行特征提取是非常有帮助的。这个任务可以为新手提供解决的这类问题一些的经验。 ●一般而言,特征提取有如下步骤:邮票比纸要黑。 ●邮票包含图像的部分不重叠。 ●邮票具有最大最小尺寸。 ●邮票是长方形的。

图 5.1: Mi c he l图表的部分页. 如果直接使用属性清单而非编程,任务会变得很简单。可惜由于语言的含糊,这是不可能的。所以你需要建构具有精确的语法和语义的语言,尽可能接近非正式的描述。使用HDevelop语法,一个通常的程序看起来如下: dev_close_window () read_image (Catalog, ’swiss1.tiff’) get_image_pointer1 (Catalog, Pointer, Type, Width, Height) dev_open_window (0, 0,Width/2, Height/2, ’black’, WindowID) dev_set_part (0, 0,Height-1, Width-1) dev_set_draw (’fill’)

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_VC相关

如何使用VC在Halcon中得到像素的信息 作者:支源,时间2007-3-16 Halcon的强大功能使我们省去很多图像处理(机器视觉)中的很多麻烦而又重复性的工作。但是,面向不同的应用,应该编写自己最核心的算法,从而达到最佳的处理效果;而且Halcon并不可能把各种情况都考虑进去。以下是我初步入门Halcon和VC的一点感触和想法,已经被实验证明了是正确的。 1,在VC中,使用Halcon打开图像文件,这里要注意read_image()和get_image_pointer1()指令被HDevelop翻译过来以后如下: Hobject Image HTuple Pointer, Type, Width, Height get_image_pointer1(Image, &Pointer, &Type, &Width, &Height); VC中如下声明: Halcon::Hobject Image Halcon::HTuple Pointer, Type, Width, Height VC中也可以如下声明使用: Hobject Image Char lpcsType[MAX_STRING] Hlong Pointer, Width, Height 或long Width, Height (如果定义为HTuple Pointer ; Hlong Width, Height; 编译会出现错误; 使用Halcon::HTuple Pointer, Type, Width, Height的话,后续中需要 图像的高宽时,强制类型转换不可用; 当然Hlong可以换成long,推荐使用Hlong。) get_image_pointer1(Image, &Pointer, lpcsType, &Width, &Height); 这里注意,在VC中如果get_image_pointer1( )中的字节类型使用tuple变量,那么Width和Height也必须使用tuple变量,否则编译时候容易出错误,至于原因是什么,可能halcon编译的时候需要各个参数的类型形式一致。 2,tuple类型的返回指针Pointer指向图像数据区域(如果是彩色则指向色彩的第一通道),图像的RGB色彩存放是同一种色彩信号最放在一起。注意Pointer所指向区域的大小比图像必须的色彩信息要大许多,这里可能是因为必须为tuple变量定义一定的类型限制,从而使用的空间变大了(由于不了解tuple的内部存储格式,所以不敢断定)。请看下面一段例子程序:使用Halcon,把彩色图像转化为灰度图像,然后使用Pointer指针得到灰度图像并显示,包括在VC窗口中进行显示部分。 using namespace Halcon; char lpcsType[MAX_STRING]; Hlong PointerGray,WidthGray, HeightGray; rgb1_to_gray(objImage, &objImageGray); get_image_pointer1(objImage, &PointerGray, lpcsType, &WidthGray, &HeightGray); BYTE * lpByte; BYTE * ImageGray; int bytewidth; bytewidth = ((long) WidthGray * 3 + 3 ) / 4 * 4 ;

vb连接halcon读取图像

halcon基本,vb连接halcon读取图像,视频 halcon学习方法:安装完halcon之后,在开始里出现一些文档 quick_guide.pdf 快速入门halcon hdevelop_users_guide.pdf 详细讲解在hdevelop中使用halcon,及hdevelop的操作 programmers_guide.pdf 详细讲解在高级语言中的使用halcon reference_hdevelop.pdf 讲解各个算子、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、vb中使用halcon窗口加载图像 1.读取图像 [cpp]view plaincopyprint? 1.read_image (Lena, 'F:/image/lena.jpg') 2.get_image_size (Lena, Width, Height) 3.dev_close_window () 4.dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle) 5.set_display_font (WindowHandle, 14, 'mono', 'true', 'false') 6.dev_display (Lena) 7.disp_continue_message (WindowHandle, 'black', 'true') 8.stop () 2.导出vb的bas代码 选择文件/导出,弹出

注意:此处选择使用halcon窗口 3.vb中调用read_image.bas 先看一下read_image.bas的内容,可知在需要的地方直接调用main即可 [vb]view plaincopyprint? 1.... 2. 3.' Main procedure 4.Private Sub action() 5. 6. ' Local iconic variables 7. Dim ho_Lena As HUntypedObjectX 8. 9. 10. ' Local control variables 11. Dim hv_Width As Variant, hv_Height As Variant 12. Dim hv_WindowHandle As Variant 13. 14. 15. Call Op.ReadImage(ho_Lena, "F:/image/lena.jpg") 16. Call Op.GetImageSize(ho_Lena, hv_Width, hv_Height) 17. If COMExpWinHandleStack.IsOpen() Then 18. Op.CloseWindow (COMExpWinHandleStack.Pop()) 19. End If 20. Call Op.SetWindowAttr("background_color", "black") 21. Call Op.OpenWindow(0, 0, Tuple.TupleDiv( _ 22. hv_Width, 2), Tuple.TupleDiv(hv_Height, 2), 0, "", "", hv_WindowHandle) 23. COMExpWinHandleStack.Push (hv_WindowHandle) 24. Call set_display_font(hv_WindowHandle, 14, "mono", "true", "false") 25. If COMExpWinHandleStack.IsOpen() Then 26. Call Op.DispObj(ho_Lena, COMExpWinHandleStack.GetActive()) 27. End If 28. Call disp_continue_message(hv_WindowHandle, "black", "true") 29. HDevelopStop 30.End Sub 31. 32. 33. 34.#If Not NO_EXPORT_APP_MAIN Then 35.Sub InitHalcon() 36. ' Default settings used in HDevelop 37. Call Op.SetSystem("do_low_error", "false") 38.End Sub 39. 40.Sub Main() 41. Call InitHalcon 42. Call action 43.End Sub 44. 45.#End If

注释的HALCON的标定校正程序

注释的HALCON的程序 时间:2015-11-12 13:25:58阅读:4评论:0收藏:0[点我收藏+]标签:des si代码it la sp文件数据ha *关闭窗口 dev_close_window () dev_close_window () *打开指定大小、颜色背景的窗口 dev_open_window (0, 0, 768/2, 576/2, ‘black‘, WindowHandle1) dev_update_pc (‘off‘) dev_update_window (‘off‘) dev_update_var (‘off‘) dev_update_time (‘off‘) dev_set_draw (‘margin‘) dev_set_line_width (3) * * Calibrate the camera.(标定相机)步骤一 * * 标定板描述文件 CaltabName := ‘caltab_big.descr‘ * make sure that the file ‘CaltabDescrName‘ is in the current directory, * the HALCONROOT/calib directory, or use an absolut path

*初始相机参数:焦距、畸变系数Kappa,Sx,Sy,Cx,Cy,ImageWidth,ImageHeight StartCamPar := [0.008,0,0.0000086,0.0000086,384,288,768,576] *物体在空间坐标系中的位姿数组 NStartPose := [] *行角点数组 NRow := [] *列角点数组 NCol := [] *X、Y、Z从标定表文件获取计算值 caltab_points (CaltabName, X, Y, Z) *创建空的图像元组 gen_empty_obj (Images) *图像的数目 NumImages := 10 *接下来for循环,依次读取、处理NumImages张图像 for I := 1 to NumImages by 1 *读取图像:Image得到图像数据 read_image (Image, ‘calib/calib-3d-coord-‘+I$‘02d‘) *将单个Image加入元组Images中 concat_obj (Images, Image, Images) *显示Image dev_display (Image) *在图像中找到标定板的区域:图像,标定板描述文件,滤波核大小,二值化值

Halcon机器视觉二维码实例及分步注解

Halcon机器视觉二维码实例及分步注解 [plain]view plaincopy 1.*2D Code generated by Image Acquisition01 2.*QR Code 3.dev_close_window() 4.dev_open_window(0,0,400,400,'black',WindowHandle) 5.*先关闭活动图形窗口,再打开这个窗口,标识符为WindowHandle; 6.*相对于界面左上角第0行、第0列,大小为400×400像素,颜色为黑色。 7.open_framegrabber('DirectShow',1,1,0,0,0,0,'default',8,'rgb',-1,'false','defa ult','Gsou USB2.0Camera',0,-1,AcqHandle) 8.*打开帧接收器(图像采集设备,如摄像头,工业相机等),参数(Parameter)详见这个算子 9.*注意摄像头的名称,可以用工具栏中的“助手”——打开新的Image Acquisition获取摄像头及插入代码 10.grab_image_start(AcqHandle,-1) 11.while(true) 12.grab_image_async(Image,AcqHandle,-1) 13.create_data_code_2d_model('QR Code',[],[],DataCodeHandle) 14.*二维码的创建开头的算子,clear为结束清除的算子,见下。 15.set_display_font(WindowHandle,16,'mono','true','false') 16.dev_set_color('forest green') 17.dev_set_draw('margin') 18.dev_set_line_width(3) 19.set_data_code_2d_param(DataCodeHandle,'default_parameters','enhanced_recognition') 20.*设置选定参数的二维数据模型,参数详见这个算子 21.find_data_code_2d(Image,SymbolXLDs,DataCodeHandle,[],[],ResultHandles,DecodedDa taStrings) 22.*检测和读取二维代码符号,也支持读取二维数据模型的序列,参数详见这个算子 23.for i:=0to|ResultHandles|-1by1 24.select_obj(SymbolXLDs,SymbolXLD,i+1) 25.get_contour_xld(SymbolXLD,Row,Col) 26.get_string_extents(WindowHandle,DecodedDataStrings[i],Ascent,Descent,TxtWidth ,TxtHeight) 27.disp_message(WindowHandle,DecodedDataStrings[i],'image',max(Row-50),max([min( Col+30)-TxtWidth/2,1]),'black','true') 28.endfor 29.*这段for循环语句的目的是让解码到的字符串(二维码的内容)显示到二维码深绿色(forest green上 面定义)的解码区域框的行列位置。 30.*disp_message(WindowHandle,DecodedDataStrings,'window',12,12,'black','true') 31.*如果不需要设置显示到区域框中间的位置,而是显示到窗体的上方或其他位置,那么不需要上面那段for 语句,只需这段信息显示的语句即可显示到窗体相应位置。 32.if(|DecodedDataStrings|>0) 33.disp_continue_message(WindowHandle,'black','true')

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是世界范围内广泛使用的机器视觉软件,用户可以利用其开放式结构快速开发图像处理和机器视觉软件。 HALCON提供交互式的编程环境HDevelop。可在Windows,Linux,Unix下使用,使用HDevelop可使用户快速有效的解决图像处理问题。HDevelop含有多个对话框工具,实时交互检查图像的性质,比如灰度直方图,区域特征直方图,放大缩小等,并能用颜色标识动态显示任意特征阈值分割的效果,快速准确的为程序找到合适的参数设置。HDevelop程序提供进程,语法检查,建议参数值设置,可在任意位置开始或结束,动态跟踪所有控制变量和图标变量,以便查看每一步的处理效果。当用户对于机器视觉编程代码完成后,HDevelop可将此部分代码直接转化为C++,C或VB源代码,以方便将其集成到应用系统中。 HALCON提供交互式的模板描述文件生成工具HmatchIt,。可交互式地为一个模型定义一个任意形状的感性趣区域,HmatchIt优化给出此创建模型的合适参数, 自动生成模板描述文件以供程序调用,快速为基于形状匹配和结构匹配的用户找到实现目标识别和匹配应用的合适的参数设置。 HALCON提供支持多CPU处理器的交互式并行编程环境Paralell Develop, 其继承了单处理器板HDevelop的所有特点,在多处理器计算机上会自动将数据比如图像分配给多个线程,每一个线程对应一个处理器,用户无需改动已有的HALCON程序,就立即获得显

著的速度提升。 HALCON中HDevelop Demo中包含680个应用案例,根据不同的工业领域,不同的用法和算法分类列出,用户可以根据自己的需求方便的找到相对应的类似案例,快速掌握其函数用法。 HALCON提供的函数使用说明文档,详细介绍每个函数的功能和参数用法,提供在不用开发语言(VC,VB,.NET等)下的开发手册,而且提供一些算法(例如3D)的原理性介绍,给用户的学习提供帮助。 特点:原型化的开发平台,自动语法检查; 动态察看控制和图标变量; 支持多种操作系统; 支持多CPU; 支持多种文件格式; 自动语言转化功能; 与硬件无关,可支持各种硬件; 应用领域:医学图像分析; 2D/3D测量; 立体视觉; 匹配定位; 光学字符识别; Blob分析;

跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码

跟我学机器视觉-HALCON学习例程中文详解-QQ摄像头读取条码 第一步:插入QQ摄像头,安装好驱动(有的可能免驱动) 第二步:打开HDevelop,点击助手—打开新的Image Acquisition—选中图像获取接口(I),然后点击检测,找到摄像头。如下图: 第三步:点击连接,将颜色空间设置为gray,然后点击实时,此时图像窗口中将显示采集到的图像,将物体放置到摄像头前,位置调至条码清晰。如下图:

集,点击插入代码,此时程序编辑器中将自动生成代码,如下图:

这时单击下运行按钮,将会采集一副图像并显示到图形窗口中。接下来我们将开始条码读取的工作。 第五步:在Do Something后插入如下代码: create_bar_code_model ([ ], [ ], BarCodeHandle) *由于不知道条码是何类型,因此条码类型设置为auto。CodeTypes := ['auto'] find_bar_code (Image, SymbolRegions, BarCodeHandle, CodeTypes, DecodedDataStrings) get_bar_code_result (BarCodeHandle, 'all', 'decoded_types', DecodedDataTypes) 这时再重新运行程序,只要图像清晰,此时就可以读到条码了。条码区域会变成红色,而且在变量窗口中可以查到读取的条码类型和内容。如下图:

第六步:我们再添加代码,将读取结果直接显示在图像窗口中。 disp_message (WindowHandle, DecodedDataTypes[0]+': '+DecodedDataStrings[0], 'image', 100, 160, 'forest green', 'true') 此时会提示错误WindowHandle未被初始化。 *获取更多课程请Q智达工控学院:1613985351 因为图像采集助手会自动打开一个窗口,因此我们先将它关闭,然后自己创建一个窗口。在程序最开始加上这两句代码: dev_close_window () dev_open_window (0, 0, 512, 512, 'black', WindowHandle) 再重新运行程序,此时在读取到的条码在图像中写出来了。如下图:

halcon算子注解查询手册

Chapter 1 :Classification (4) 1.1 Gaussian-Mixture-Models (4) 1.2 Hyperboxes (4) 1.3 Neural-Nets (5) 1.4 Support-Vector-Machines (6) Chapter 2 Control (7) Chapter3 :Develop (8) Chapter 4 :File (10) 4.1 Images (10) 4.2 Misc (10) 4.3 Region (10) 4.4 Text (10) 4.5 Tuple (11) Chapter 5:Filter (12) 5.1 Arithmetic (12) 5.2 Bit (12) 5.3 Color (13) 5.4 Edges (13) 5.5 Enhancement (14) 5.6 FFT (15) 5.7 Geometric-Transformations (16) 5.8 Inpainting (17) 5.9 Lines (17) 5.10 Match (18) 5.11 Misc (18) 5.12 Noise (18) 5.13 Optical-Flow (19) 5.14 Points (19) 5.15 Smoothing (19) 5.16 Texture (20) 5.17 Wiener-Filter (20) Chapter 6 :Graphics (21) 6.1 Drawing (21) 6.2 Gnuplot (22) 6.3 LUT (22) 6.4 Mouse (23) 6.5 Output (23) 6.6 Parameters (24) 6.7 Text (26) 6.8 Window (27) Chapter 7 :Image (28) 7.1 Access (28) 7.2 Acquisition (28) 7.3 Channel (29)

Halcon学习笔记之缺陷检测(二)教学教材

Halcon学习笔记之缺陷检测(二)例程:detect_indent_fft.hdev 说明:这个程序展示了如何利用快速傅里叶变换(FFT)对塑料制品的表面进行目标(缺陷)的检测,大致分为三步: 首先,我们用高斯滤波器构造一个合适的滤波器(将原图通过高斯滤波器滤波); 然后,将原图和构造的滤波器进行快速傅里叶变换; 最后,利用形态学算子将缺陷表示在滤波后的图片上(在缺陷上画圈)。 注:代码中绿色部分为个人理解和注释,其余为例程中原有代码 *Initialization(初始化) dev_updata_off() //这一句包含如下三个算子: //dev_updata_pc(‘off’) 关闭更新程序计数器//dev_updata_var(‘off’) 关闭更新变量窗口 //dev_updata_window(‘off’) 关闭更新图像窗口(即通过命令来显示想要在图像窗口显示的图片) dev_close_window() //关闭活动的图像窗口 read_image(Image,’plastics / plastics_01’) //载入图片//参数说明:为读入图片命名(Image)// 文件名(’plastics/plastics_01’) get_image_size(Image,Width,height) //获取图片的长宽;//参数说明:之前读入或生成的图片(Image)// 图片的宽(Width)// 图片的高(Height) dev_open_window(0,0,Width,Height,’Black’,WindowHandle) //打开一个新的图像窗口//参数说明:起始坐标(0,0)// 大小(Width,Height)// 背景颜色(’Black’)// 窗口句柄(WindowHandle) set_display_font (WindowHandle,14,’mono’,’ture’,’false’)//设置不依赖操作系统的字体 //参数说明:窗口句柄(WindowHandle)

Halcon算子中文功能注解

Chapter_1_:Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训练数据上。 2.classify_class_gmm 功能:通过一个高斯混合模型来计算一个特征向量的类。 3. clear_all_class_gmm 功能:清除所有高斯混合模型。 4. clear_class_gmm 功能:清除一个高斯混合模型。 5. clear_samples_class_gmm 功能:清除一个高斯混合模型的训练数据。 6. create_class_gmm 功能:为分类创建一个高斯混合模型。 7.evaluate_class_gmm 功能:通过一个高斯混合模型评价一个特征向量。 8. get_params_class_gmm 功能:返回一个高斯混合模型的参数。 9. get_prep_info_class_gmm 功能:计算一个高斯混合模型的预处理特征向量的信息内容。 10. get_sample_class_gmm 功能:从一个高斯混合模型的训练数据返回训练样本。 11. get_sample_num_class_gmm 功能:返回存储在一个高斯混合模型的训练数据中的训练样本的数量。 12. read_class_gmm 功能:从一个文件中读取一个高斯混合模型。 13. read_samples_class_gmm 功能:从一个文件中读取一个高斯混合模型的训练数据。 14. train_class_gmm 功能:训练一个高斯混合模型。 15. write_class_gmm 功能:向文件中写入一个高斯混合模型。 16. write_samples_class_gmm 功能:向文件中写入一个高斯混合模型的训练数据。 1.2 Hyperboxes 1. clear_sampset 功能:释放一个数据集的内存。 2. close_all_class_box 功能:清除所有分类器。 3. close_class_box 功能:清除分类器。 4. create_class_box 功能:创建一个新的分类器。 5. descript_class_box 功能:分类器的描述。 6. enquire_class_box 功能:为一组属性分类。 7. enquire_reject_class_box 功能:为一组带抑制类的属性分类。8. get_class_box_param 功能:获取关于现在参数的信息。 9. learn_class_box 功能:训练分类器。 10. learn_sampset_box 功能:用数据组训练分类器。 11. read_class_box 功能:从一个文件中读取分类器。 12.read_sampset 功能:从一个文件中读取一个训练数据组。 13. set_class_box_param 功能:为分类器设计系统参数。 14. test_sampset_box 功能:为一组数组分类。 15. write_class_box 功能:在一个文件中保存分类器。 1.3 Neural-Nets 1. add_sample_class_mlp 功能:把一个训练样本添加到一个多层感知器的训练数据中。 2. classify_class_mlp 功能:通过一个多层感知器计算一个特征向量的类。3. clear_all_class_mlp 功能:清除所有多层感知器。 4. clear_class_mlp 功能:清除一个多层感知器。 5. clear_samples_class_mlp 功能:清除一个多层感知器的训练数据。 6. create_class_mlp 功能:为分类或者回归创建一个多层感知器。 7. evaluate_class_mlp 功能:通过一个多层感知器计算一个特征向量的评估。 8. get_params_class_mlp 功能:返回一个多层感知器的参数。 9. get_prep_info_class_mlp 功能:计算一个多层感知器的预处理特征向量的信息内容。 10. get_sample_class_mlp 功能:从一个多层感知器的训练数据返回一个训练样本。 11. get_sample_num_class_mlp 功能:返回存储在一个多层感知器的训练数据中的训练样本的数量。 12. read_class_mlp 功能:从一个文件中读取一个多层感知器。 13. read_samples_class_mlp 功能:从一个文件中读取一个多层感知器的训练数据。 14. train_class_mlp、 功能:训练一个多层感知器。 15. write_class_mlp 功能:向一个文件中写入一个多层感知器。 16. write_samples_class_mlp 功能:向一个文件中写入一个多层感知器的训练数据。

halcon机器视觉试验平台设计方案与研究报告

封面

作者:PanHongliang 仅供个人学习 基于HALCON的机器视觉系统的研究与实现 摘要 近年来,机器视觉系统以其高效率、高可靠、低成本的特点在国外取得了广泛的应用。机器视觉系统适用于众多领域,例如工业自动化、医药业、制造业、农业等,弥补了人类视觉的很多不足。本文采用德国MVTec公司的专业机器视觉软件HALCON来开发机器视觉系统,提出了相关机器视觉实现方法,

并且在机器视觉实验平台上完成了一个弹簧片检测任务。 目前关注较多的是机器视觉系统的硬件部分,而机器视觉软件部分关注较少,一个先进的机器视觉系统除了具有高性能的硬件外,还需要有高性能的软件,虽然说许多常见的开发软件例如Mircosoft的Visual Studio、NI的LabWindows\CVI等等都可以开发机器视觉系统,但是开发周期比较长,针对性较弱,程序的复杂程度较高。而采用HALCON作为机器视觉和图像处理核心软件,不仅大大缩短了开发周期,降低了开发难度,而且可以参考HALCON 提供的众多机器视觉和图像处理例程来针对具体的任务做具体开发。 文章的第一章研究了机器视觉系统的组成、应用现状和发展,并且对机器视觉软件HALCON做了概述。第二章根据相关要求,选择合适的硬件单元,设计和搭建了VS-ZM1200机器视觉实验平台。第三章研究了机器视觉中常用的一些图像处理技术,重点讨论了在弹簧片检测任务中所采用的图像处理技术和算法,如图像的增强,分割,边缘检测等。第四章研究了机器视觉软件,重点研究了HALCON,并且对在Visual C++开发环境下如何使用HALCON编写的程序做了讨论。第五章介绍了在VS-ZM1200机器视觉实验平台上,使用HALCON和Visual C++开发的一套弹簧片检测系统,该系统完成关于弹簧片的尺寸参数测量和外观参数判别的任务。 第一章:绪论 1.1机器视觉概述 人类在征服自然、改造自然和推动社会进步的过程中,为了克服自身能力、能量的局限性,发明和创造了许多机器来辅助或代替人类完成任务。这类机器,我们通常称为智能机器,它能模拟人类的功能,能感知外部世界并有效地解决人所希望解决的问题。人类感知外部世界主要是通过视觉、触觉、听觉和嗅觉等感觉器官,而视觉,是人类最重要的感觉功能。视,就是看。觉,就是感觉、感知。通过看来感知外部世界丰富多采的信息。“百闻不如一见”,这句话生动地说明了视觉对获得客观世界信息的重要性。据统计,人所感知的外界信息有80%以上是由视觉得到的[1],通过视觉,我们可以感受到物体的位置,亮度以及物体之间的相互关系等。因此,对于智能机器来说,赋予机器人类的视觉功能对发展智能机器是极其重要的,由此形成了 一门新的学科———机器视觉。 机器视觉,就是用机器(通常是数字计算机)代替人眼来做测量及判断,对图像进行自动处理并报告“图像中有什么”的过程。美国制造工程师协会(SME Society of Manufacturing Engineers)机器视觉分会和美国机器人工业协会(RIA Robotic Industries Association)的自动化视觉分会对机器视觉下的定义为:“机器视觉是通过光学的装置和非接触的传感器自动地接收和处理一个真实物体的图像,以获得所需信息或用于控制机器人运动的装置”。具体来讲,是指通过镜头将被测目标转化为图像信号,投射至影像接受器件(一般为 CCD 元件)上再通过数字计算机进行分析处理。CCD是英文(Charge Coupling Device)的缩写,其中文含义为电荷耦合组件。当不同强度的光线照射在CCD表面,CCD

HALCON中文中文注解

Halcon查询图像参数 1、get_grayval ( Image : : Row, Column : Grayval ) 计算Image图像中坐标为(Row,Column)的点的灰度值Grayval。 2、get_image_pointer1 ( Image : : : Pointer, Type, Width, Height ) 计算Image图像的数据指针Pointer,图像类型Type,图像宽度Width和高度Height。Pointer指向了Image data的起点位置。 3、get_image_pointer3 ( ImageRGB : : : PointerRed, PointerGreen, PointerBlue, Type, Width, Height ) 计算彩色图像ImageRGB的参数。 4、get_image_pointer1_rect ( Image : : : PixelPointer, Width, Height, VerticalPitch, HorizontalBitPitch, BitsPerPixel ) 计算Image图像中定义区域的最小的长方形的区域的指针Pointer,宽度Width,高度Height,VerticalPitch代表Image的Width*(HorizontalBitPitch/8)。两个相邻象素的水平距离(以比特计算)HorizontalBitPitch,每像素的比特数BitsPerPixel。 5、get_image_time ( Image : : : MSecond, Second, Minute, Hour, Day, YDay, Month, Year ) 获取图像生成的时间。

Halcon学习笔记之缺陷检测(二)

Halcon学习笔记之缺陷检测(二)例程: 说明:这个程序展示了如何利用快速傅里叶变换(FFT)对塑料制品的表面进行目标(缺陷)的检测,大致分为三步: 首先,我们用高斯滤波器构造一个合适的滤波器(将原图通过高斯滤波器滤波); 然后,将原图和构造的滤波器进行快速傅里叶变换; 最后,利用形态学算子将缺陷表示在滤波后的图片上(在缺陷上画圈)。 注:代码中绿色部分为个人理解和注释,其余为例程中原有代码 *Initialization(初始化) dev_updata_off() //这一句包含如下三个算子: //dev_updata_pc(‘off’) 关闭更新程序计数器//dev_updata_var(‘off’) 关闭更新变量窗口 //dev_updata_window(‘off’) 关闭更新图像窗口(即通过命令来显示想要在图像窗口显示的图片) dev_close_window() //关闭活动的图像窗口 read_image(Image,’plastics / plastics_01’) //载入图片//参数说明:为读入图片命名(Image)// 文件名(’plastics/plastics_01’)get_image_size(Image,Width,height) //获取图片的长宽;//参数说明:之前读入或生成的图片(Image)// 图片的宽(Width)// 图片的高(Height) dev_open_window(0,0,Width,Height,’Black’,WindowHandle) //打开一个新的图像窗口//参数说明:起始坐标(0,0)// 大小(Width,Height)// 背景颜色(’Black’)// 窗口句柄(WindowHandle) set_display_font (WindowHandle,14,’mono’,’ture’,’false’)//设置不依赖操作系统的字体 //参数说明:窗口句柄(WindowHandle) // 字体大小(14) // 字体类型(’mono’) // 是否黑体(’ture’) // 是否倾斜(’false’) dev_set_draw(‘Margin’) //定义区域填充模式//参数说明:填充模式(’Margin’或者’Fill’) dev_set_line_width(3)//设置输出区域轮廓线的线宽//可以修改参数来看最后缺陷区域标示的区别dev_set_color(’red’)//设置一种或者多种输出颜色 * *Optimize the fft speed for the specific image size(根据指定图像大小进行fft速度最优化) optimize_rft_speed(Width,Height,’standard’)//对指定大小的图片的fft速度进行优化//参数说明:图片大小(Width,Height)// 优化模式(’standard’) * *Construct a suitable filter by combining two Gaussian filters(结合两个高斯滤波器构造一*个合适的滤波器)Sigma1 :=

相关主题
文本预览
相关文档 最新文档