文档库 最新最全的文档下载
当前位置:文档库 › Halcon例程学习

Halcon例程学习

Halcon例程学习
Halcon例程学习

**********intensity.hdev例程**********

* Calculate the mean and deviation of gray values of regions of an image *

*读入图像

read_image (Image, 'mreut')

*关闭(当前)活动的图形窗口

dev_close_window ()

*获取图像的宽度和高度

get_image_size (Image, Width, Height)

*打开一个新的图形窗口

dev_open_window (0, 0, Width, Height, 'black', WindowID)

*在当前窗口显示Image对象

dev_display (Image)

*设置区域(Region)填充模式

dev_set_draw ('margin')

* Create two regions

* gen_rectangle1( : Rectangle : Row1, Column1, Row2, Column2 : ) gen_rectangle1 (Rectangle1, 350, 100, 450, 200)

gen_rectangle1 (Rectangle2, 100, 200, 200, 300)

*计算灰度的均值和标准差

*intensity(Regions, Image : : : Mean, Deviation)

intensity (Rectangle1, Image, Mean1, Deviation1)

intensity (Rectangle2, Image, Mean2, Deviation2)

**********auto_threshold.hdev例程**********

*关闭(当前)活动的窗口

dev_close_window ()

read_image (Aegypt1, 'egypt1')

get_image_size (Aegypt1, Width, Height)

*打开一个新的图形窗口

dev_open_window (0, 0, Width, Height, 'black', WindowID)

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

dev_set_colored (6)

dev_clear_window ()

*直方图自动阈值分割(自适应阈值),根据灰度直方图中两波峰中的波谷中取出阈值

*自动阈值输入必须是单通道图像,会有多阈值分割,sigma对于灰度直方图进行高斯平滑,决定平滑程度(分割细致程度)*sigma越大,灰度直方图基本会被平滑只剩下一个波峰,分割是根据平滑后直方图的波谷进行的

*sigma越小,分割越细致

*Default value: 2.0

*Suggested values: 0.0, 0.5, 1.0, 2.0, 3.0, 4.0, 5.0

Sigma := 4

auto_threshold (Aegypt1, Regions, Sigma)

*计算出图像区域的绝对灰度和相对灰度直方图

*gray_histo(Regions, Image : : : AbsoluteHisto, RelativeHisto)

gray_histo (Aegypt1, Aegypt1, AbsoluteHisto, RelativeHisto)

*下面算子可以求出出现频率最多的灰度值

*PeakGray := sort_index(AbsoluteHisto)[255]

*简单显示操作

disp_continue_message (WindowID, 'black', 'true')

stop ()

dev_clear_window ()

*将离散的点连接成一个函数并对其进行操作

create_funct_1d_array (AbsoluteHisto, Function)

*平滑滤波,对一维数组进行平滑处理

smooth_funct_1d_gauss (Function, Sigma, SmoothedFunction)

dev_set_color ('red')

*将数据分别对应赋予一个横坐标

funct_1d_to_pairs (SmoothedFunction, XValues, YValues)

*将一个直方图转化为一个区域

*gen_region_histo( : Region : Histogram, Row, Column, Scale : )

gen_region_histo (Histo1, YValues, 255, 255, 1)

dev_display (Aegypt1)

dev_set_color ('white')

gen_region_histo (Histo2, RelativeHisto, 255, 255, 1)

**********获取图像参数**********

*读入图像

read_image (Image, 'fabrik')

*获取图像生成时间

get_image_time(Image,MSecond, Second, Minute, Hour, Day, YDay, Month, Year)

*关闭当前活动的图形窗口

dev_close_window()

*获取图像的宽度和高度

get_image_size(Image,Width,Height)

*按比例1:1显示图像

dev_open_window(0,0,Width,Height,'black', WindowHandle)

dev_display(Image)

*获取图像的类型,包括:

*‘i nt1', 'int2', 'uint2', 'int4', 'int8', 'byte', 'real'

*'direction', 'cyclic', 'complex', 'vector_field'

get_image_type(Image,Type)

*计算Image图像中坐标为(Row,Column)的点的灰度值Grayval

get_grayval(Image,100,100,Graycal)

*计算Image图像的数据指针Pointer,图像类型Type,图像宽度Width和高度Height。

*Pointer指向了Image data的起点位置。

get_image_pointer1(Image,Pointer,Type,Width,Height)

*读入彩色图像并显示

dev_close_window()

read_image(ImageRGB,'cable1')

get_image_size(ImageRGB,WidthRGB,HeightRGB)

dev_open_window(0,0,WidthRGB,HeightRGB,'black', WindowHandle)

dev_display(ImageRGB)

*计算彩色图像ImageRGB的参数

get_image_pointer3(ImageRGB,PointerRed, PointerGreen, PointerBlue, TypeRGB, WidthRGB, HeightRGB)

*计算Image图像中定义区域的最小的长方形的区域的指针Pointer,宽度Width,高度Height

*VerticalPitch代表Image的Width*(HorizontalBitPitch/8)

*两个相邻象素的水平距离(以比特计算)HorizontalBitPitch,每像素的比特数BitsPerPixel

get_image_pointer1_rect(ImageRGB,PixelPointer, WidthRGBRect, HeightRGBRect, VerticalPitch, HorizontalBitPitch, BitsPerPixel)

**********对图像通道进行处理**********

read_image(ImageRGB,'C:/Program Files/MVTec/HALCON-10.0/images/claudia.png')

dev_close_window()

get_image_size(ImageRGB,Width, Height)

dev_open_window(0,0,Width, Height, 'black', WindowHandle)

dev_display(ImageRGB)

*计算图像的通道数

*count_channels(MultiChannelImage : : : Channels)

count_channels(ImageRGB,Channels)

*获取多通道图像MultiChannelImage的Channel通道的图像Image

access_channel(ImageRGB,ImageR, 1)

access_channel(ImageRGB,ImageG, 2)

access_channel(ImageRGB,ImageB, 3)

*使用for循环进行读取通道数

*ImageForRGB :=[]

*for index :=1 to Channels by 1

* access_channel(ImageRGB,ImageForRGB[index],index)

*endfor

*将多幅单通道图像合并成一幅多通道图像

channels_to_image(ImageB,MultiChannelImage)

*将两幅单通道图像合并为二通道图像

compose2(ImageR,ImageG,ImageRG)

*将三幅单通道图像合并为三通道图像

compose3(ImageR,ImageG,ImageB,ImageRGBNew)

*将一幅三通道图像转换为三幅单通道图像

decompose3(ImageRGBNew,ImageRNew,ImageGNew,ImageBNew)

*将多通道图像转换为多幅单通道图像

image_to_channels(ImageRGBNew,Images)

*将ImageRGBNew图像的通道与MultiChannelImage的通道叠加得到新图像ImageExtended,变为4通道append_channel(ImageRGBNew,MultiChannelImage,ImageExtended)

**********获取图像ROI**********

read_image(Image,'landmarks')

*复制图像

copy_image(Image,DupImage)

*获取图像参数,设置显示方式

get_image_size(Image,Width,Height)

dev_close_window()

dev_open_window(0,0,Width,Height,'white', WindowHandle)

dev_set_color('blue')

*显示的对象只有边缘线

dev_set_draw('margin')

*修改图像显示区域

dev_set_part(0,0,Height-1,Width-1)

dev_display(Image)

*设置字体

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

disp_message (WindowHandle, 'Draw the region of interest with your mouse', 'window', -1, -1, 'blue', 'false') *设置输出颜色

dev_set_color ('blue')

draw_region (DrawRegion, WindowHandle)

dev_display (DrawRegion)

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

stop ()

*得到图像Image相对于Region区域的为定义域的图像

reduce_domain (Image, DrawRegion, ImageReduced)

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

stop ()

*获取带角度的自定义矩形、圆形ROI

gen_circle (ROI_00, 83.5, 519.5, 12.7279)

gen_rectangle1 (TMP_Region01, 152.5, 612.5, 179.5, 644.5)

*将两个Region连在一起

*union2(Region1, Region2 : RegionUnion : : )

union2 (ROI_00, TMP_Region01, ROI_00)

gen_rectangle2 (TMP_Region02, 508.5, 578.5, rad(-12.0613), 119.641, 35.6232)

union2 (ROI_00, TMP_Region02, ROI)

reduce_domain (Image, ROI, ImageReduced01)

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

stop ()

**********生成不同格式的图像**********

read_image(Image,'monkey')

*基于区域生长法分割图像

*regiongrowing(Image : Regions : Row, Column, Tolerance, MinSize : )

regiongrowing(Image,Regions,3, 3, 6, 100)

*将region转换为二进制图像

*region_to_bin(Region : BinImage : ForegroundGray, BackgroundGray, Width, Height : )

*ForegroundGray, BackgroundGray分别为前景色灰度值和背景色灰度值。Width, Height为Region的宽度和高度。

*给区域内的所有像素赋给前景灰度值,如果输入区域大于生成的图像,则会在图像边界处截断;

region_to_bin(Regions, BinImage, 255, 0, 512, 512)

*将区域转化为一个标签图像,通过索引值:第一个区域赋予灰度值1,第二个区域赋予灰度值2,依此类推……

*这里仅仅使用正的灰度值,直到256。区域大于生成图像则会被适当地截断。如果区域重叠,则较高值的图像会被输出。*如果想重叠,可以调用expand_region进行处理。Type='int2'、'int4'、‘byte'

*region_to_label(Region : ImageLabel : Type, Width, Height : )

region_to_label(Regions,ImageLabel, 'int2', 512, 512)

*用均值来填充图像区域

*region_to_mean(Regions, Image : ImageMean : : )

region_to_mean(Regions,Image, ImageMean)

**********计算Region区域的参数**********

read_image(Image,'rings_and_nuts')

dev_close_window()

get_image_size(Image,Width, Height)

dev_open_window(0, 0, Width, Height, 'black', WindowHandle)

dev_display(Image)

dev_set_draw('margin')

dev_set_color('green')

gen_circle (ROI_0, 116.5, 127.5, 64.8151)

reduce_domain (Image,ROI_0,ImageReduced)

*计算Image图像中Region区域的面积Area和重心(Row,Column)

area_center_gray(ROI_0,Image, Area, Row, Column)

*获取Image图像Region区域的灰度绝对直方图AbsoluteHisto

*gray_histo_abs(Regions, Image : : Quantization : AbsoluteHisto)

*Quantization:灰度值的量化,ceil函数作用返回大于或者等于指定表达式的最小整数

gray_histo_abs(ROI_0, Image, 1.0, AbsoluteHisto)

*计算region区域的灰度平均值和标准差

intensity(ROI_0,Image,Mean, Deviation)

*计算Region区域的最大最小灰度值,Range:最大灰度值和最小灰度值之间的差距

*min_max_gray(Regions, Image : : Percent : Min, Max, Range)

*percent的意义是…Suggested values: 0, 1, 2, 5, 7, 10, 15, 20, 30, 40, 50

*The operator min_max_gray creates the histogram of the absolute frequencies of the gray values within

*Regions in the input image Image (see gray_histo) and calculates the number of pixels Percent corresponding *to the area of the input image. Then it goes inwards on both sides of the histogram by this number of

*pixels and determines the smallest and the largest gray value:

min_max_gray(ROI_0,Image,0, Min, Max, Range)

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 ;

Halcon学习之七:改变图像的现实方式和大小

change_format ( Image : ImagePart : Width, Height : ) 改变Image图像大小,而且ImagePart图像为灰度值图像。 crop_domain ( Image : ImagePart : : ) 从Image图像中裁剪一个矩形区域。这个矩形的周长最小。 crop_domain_rel ( Image : ImagePart : Top, Left, Bottom, Right : ) 删除相关区域,Top为顶端裁剪的行数,Left,Bottom,Right类似。 crop_part ( Image : ImagePart : Row, Column, Width, Height : ) 删除一个矩形图像区域。Row为右上角的列标索引。Width, Height为新图像ImagePart的宽度和高度。crop_rectangle1 ( Image : ImagePart : Row1, Column1, Row2, Column2 : ) 删除一个矩形图像区域。 tile_channels ( Image : TiledImage : NumColumns, TileOrder : ) 将多通道图像平铺为一幅大的单通道图像。NumColumns为平铺的列数。TileOrder为平铺的方式。tile_images ( Images : TiledImage : NumColumns, TileOrder : ) 将多通道平铺。 程序: [c-sharp] view plaincopyprint?read_image (Image, 'G:/Halcon/机器视觉 /images/brycecanyon1.png') get_image_pointer1 (Image, Pointer, Type, Width, Height) change_format (Image, ImagePart, Width/2, Height/2) crop_domain (Image, ImagePart1) crop_domain_rel (ImagePart1, ImagePart2, -20, -20, -1, -1) crop_part (ImagePart2, ImagePart3, 100, 100, Width, Height) crop_rectangle1 (ImagePart3, ImagePart4, 100, 100, 200, 200) tile_channels (Image, TiledImage, 2, 'horizontal') tile_images (Image, TiledImage1, 1, 'vertical') tile_images_offset (Image, TiledImage2, 0, 0, 50, 50, -1, -1, Width, Height)

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形状匹配总结 Halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类 本文只对形状匹配做简要说明和补充: Shape_Based匹配方法: 上图介绍的是形状匹配做法的一般流程及模板制作的两种 方法。 先要补充点知识:形状匹配常见的有四种情况一般形状匹配模板shape_model、线性变形匹配模板 planar_deformable_model、局部可变形模板 local_deformable_model、和比例缩放模板Scale_model 第一种是不支持投影变形的模板匹配,但是速度是最高的,第二种和第四种是支持投影变形的匹配,第三种则是支持局部变形的匹配。 一般形状匹配模板是最常用的,模板的形状和大小一经制作完毕便不再改变,在查找模板的过程中,只会改变模板的方向和位置等来匹配目标图像中的图像。这个方法查找速度很快,但是当目标图像中与模板对应的图像存在比例放大缩小

或是投影变形如倾斜等,均会影响查找结果。涉及到的算子通常为create_shape_model 和find_shape_model 线性变形匹配模板planar_deformable_model是指模板在行列方向上可以进行适当的缩放。行列方向上可以分别独立的进行一个适当的缩放变形来匹配。主要参数有行列方向查找缩放比例、图像金字塔、行列方向匹配分数(指可接受的匹配分数,大于这个值就接受,小于它就舍弃)、设置超找的角度、已经超找结果后得到的位置和匹配分数 线性变形匹配又分为两种:带标定的可变形模板匹配和不带标定的可变形模板匹配。涉及到的算子有: 不带标定的模板:创建和查找模板算子 create_planar_uncalib_deformable_model和 find_planar_uncalib_deformable_model 带标定模板的匹配:先读入摄像机内参和外参 read_cam_par 和read_pose 创建和查找模板算子create_planar_calib_deformable_model和 find_planar_calib_deformable_model 局部变形模板是指在一张图上查找模板的时候,可以改变模板的尺寸,来查找图像上具有局部变形的模板。例如包装纸袋上图案查找。参数和线性变形额差不多 算子如下:create_local_deformable_model和 find_local_deformable_model

Halcon学习之八:图像区域叠加与绘制

Halcon學習之八:圖像區域疊加與繪制 overpaint_gray ( ImageDestination, ImageSource : : : ) 將灰度值不相同區域用不同顏色繪制到ImageDestination中,ImageSource包含希望的灰度值圖像 overpaint_region ( Image, Region : : Grayval, Type : ) 將Region以一個恆定的灰度值繪制到Image圖像中 paint_gray ( ImageSource, ImageDestination : MixedImage : : ) 將ImageSource的圖像繪制到ImageDestination中,形成MixedImage。 paint_region ( Region, Image : ImageResult : Grayval, Type : ) 將Region以一個恆定的灰度值繪制到Image圖像中 paint_xld ( XLD, Image : ImageResult : Grayval : ) 將XLD以一個恆定的灰度值繪制到Image圖像中 set_grayval ( Image : : Row, Column, Grayval : ) 設置Image圖像中坐標為(Row,Column)的灰度值 程序: [c-sharp]view plaincopy 1read_image (Image, 'G:/Halcon/images/images/claudia.png') 2gen_circle (Circle, 200, 200, 100.5) 3reduce_domain (Image, Circle, ImageReduced) 4gen_image_proto (Image, ImageCleared, 32) 5overpaint_gray (ImageCleared, ImageReduced) 6gen_image_const (Image1, 'byte', 512, 512) 7overpaint_region (Image1, Circle, 255, 'fill') 8* /* Copy a circular part of the image into the image : */ 9read_image (Image2, 'G:/Halcon/images/images/brycecanyon1.png') 10paint_gray (ImageReduced, Image2, MixedImage) 11* /* Paint a rectangle into the image */ 12read_image (Image3, 'G:/Halcon/images/images/pads.png') 13gen_rectangle1 (Rectangle1, 30, 20, 100, 200) 14paint_region (Rectangle1, Image3, ImageResult, 255, 'fill') 15* /* Paint colored xld objects into a gray image */ 16* /* read and copy image to generate a three channel image */ 17copy_image (Image2, image0) 18copy_image (Image2, image1)

注释的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算子函数整理10 Matching-3D

HALCON算子函数——Chapter 10 : Matching-3D 1. affine_trans_object_model_3d 功能:把一个任意有限3D变换用于一个3D目标模型。 2. clear_all_object_model_3d 功能:释放所有3D目标模型的内存。 3. clear_all_shape_model_3d 功能:释放所有3D轮廓模型的内存。 4. clear_object_model_3d 功能:释放一个3D目标模型的内存。 5. clear_shape_model_3d_ 功能:释放一个3D轮廓模型的内存。 6. convert_point_3d_cart_to_spher 功能:把直角坐标系中的一个3D点转变为极坐标。 7. convert_point_3d_spher_to_cart 功能:把极坐标中的一个3D点转变为直角坐标。 8. create_cam_pose_look_at_point 功能:从摄像机中心和观察方向创建一个3D摄像机位置。 9. create_shape_model_3d 功能:为匹配准备一个3D目标模型。 10. find_shape_model_3d 功能:在一个图像中找出一个3D模型的最佳匹配。 11. get_object_model_3d_params

功能:返回一个3D目标模型的参数。 12. get_shape_model_3d_contours 功能:返回一个3D轮廓模型视图的轮廓表示。 13. get_shape_model_3d_params 功能:返回一个3D轮廓模型的参数。 14. project_object_model_3d 功能:把一个3D目标模型的边缘投影到图像坐标中。 15. project_shape_model_3d 功能:把一个3D轮廓模型的边缘投影到图像坐标中。 16. read_object_model_3d_dxf 功能:从一个DXF文件中读取一个3D目标模型。 17. read_shape_model_3d 功能:从一个文件中读取一个3D轮廓模型。 18. trans_pose_shape_model_3d 功能:把一个3D目标模型的坐标系中的位置转变为一个3D轮廓模型的参考坐标系中的位 置,反之亦然。 19. write_shape_model_3d 功能:向一个文件写入一个3D轮廓模型。

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学习笔记 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学习(24)总结(一)

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++(面向对象) 可以以面向对象的方式重写代码,也即利用类及类的成员函数;

跟我学机器视觉-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学习之四:有关图像生成的函数

Halcon学习之四:有关图像生成的函数 1、copy_image ( Image : DupImage : : ) 复制image图像 2、region_to_bin ( Region : BinImage : ForegroundGray, BackgroundGray,Width, Height : ) 将区域Region转换为一幅二进制图像BinImage。 ForegroundGray, BackgroundGray分别为前景色灰度值和背景色灰度值。Width, Height为Region的宽度和高度。 3、region_to_label ( Region : ImageLabel : Type, Width, Height : ) 将区域Region转换为一幅Lable图像ImageLabel。 Type为imagelabel的类型。 Width, Height为Region的宽度和高度。 4、region_to_mean ( Regions, Image : ImageMean : : ) 绘制ImageMean图像,将其灰度值设置为Regions和Image的平均灰度值。相关例子: [c-sharp]view plaincopyprint? 1.* 读取图像 2.read_image (Image, 'G:/Halcon/机器视觉 /images/bin_switch/bin_switch_2.png') 3.* 复制图像 4.copy_image (Image, DupImage) 5.* 区域生长算法

6.regiongrowing (Image, Regions, 3, 3, 1, 100) 7.* 生成ImageMean 8.region_to_mean (Regions, Image, ImageMean) 9.* 将Region转换为二进制图像 10.r egion_to_bin (Regions, BinImage, 255, 0, 512, 512) 11.*将Region转换为Label图像 12.r egion_to_label (Regions, ImageLabel, 'int4', 512, 512)

相关文档