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 )
获取图像生成的时间。
程序::
可以通过上述查看参数深入了解各个函数的具体意义。
- dev_open_window (0, 0, 512, 512, 'black', Handle1)
- read_image (Image, 'G:/Halcon/机器视觉/images/autobahn.png')
- get_grayval (Image, 12, 66, Grayval)
- get_image_pointer1 (Image, Pointer, Type, Width, Height)
- draw_region (Region1, Handle1)
- reduce_domain (Image, Region1, ImageReduced)
- get_image_pointer1_rect (ImageReduced, PixelPointer, Width1, Height1, VerticalPitch, HorizontalBitPitch, BitsPerPixel)
- read_image (Image1, 'G:/Halcon/机器视觉/images/claudia.png')
- get_image_pointer3 (Image1, PointerRed, PointerGreen, PointerBlue, Type1, Width2, Height2)
- get_image_time (Image, MSecond, Second, Minute, Hour, Day, YDay, Month, Year)
注意:Image1必须是彩色图像。
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、field、generic、external_trigger、grab_timeout、horizontal_resolution、image_available、image_height、image_width、line_in、start_column、start_row、volatile、vertical_resolution、continuous_grabbing、}
6、info_framegrabber ( : : Name, Query : Information, ValueList )
查询指定的图像采集接口的信息。
Name为图像采集设备的名称
Query为需要查询的参数名称
Information是指输出的文本信息
ValueList为该图像采集接口的参数值。
Name∈{1394IIDC、ABS、BaumerFCAM、BitFlow、Crevis、uEye、DahengCAM、DahengFG、DFG-LC、DirectFile、DirectShow、dPict、DT315x、DT3162、eneo、eXcite、FALCON、FlashBusMV、FlashBusMX、GigEVision、Ginga++、GingaDG、INSPECTA、TAG、INSPECTA5、iPORT、Leutron、LinX、LuCam、MatrixVisionAcquire、MILLite、File、mEnableIII、mEnableIV、mEnableVisualApplets、MultiCam、Opteon、p3i2、p3i4、PixeLINK、PX、PXC、PXD、PXR、pylon、RangerC、RangerE、SaperaLT、Sentech、SonyXCI、SonyXCI-2、SVCam-GigE、TWAIN、VRmUsbCam}
Query∈{defaults、general、info_boards、parameters、field、generic、parameters_readonly、parameters_writeonly、vertical_resolution、port、bits_per_channel、camera_type、color_space、device、external_trigger、field、generic、horizontal_resolution、image_height、image_width、start_row、start_column、revision}
7、grab_image_async ( : Image : AcqHandle, MaxDelay : )
获取AcqHandle的图像采集设备的Image
当调用grab_image_async 或者grab_data_async时,抓拍下一个图像就结束了。
- // Select a suitable image acquisition interface name AcqName
- open_framegrabber(AcqName,1,1,0,0,0,0,’default’,-1,’default’,-1.0,’default’,’default’,’default’,-1,-1,AcqHandle)
- // Grab image + start next grab
- grab_image_async(Image1,AcqHandle,-1.0)
- // Process Image1 ...
- // Finish asynchronous grab + start next grab
- grab_image_async(Image2,AcqHandle,-1.0)
- // Process Image2 ...
- close_framegrabber(AcqHandle)
8、grab_image_start ( : : AcqHandle, MaxDelay : )
开始抓拍
只有当和grab_image_async or grab_data_async一起使用时,grab_image_start 才会起作用。
- // Select a suitable image acquisition interface name AcqName
- open_framegrabber(AcqName,1,1,0,0,0,0,’default’,-1,’default’,-1.0,
- ’default’,’default’,’default’,-1,-1,AcqHandle)
- grab_image(Image1,AcqHandle)
- // Start next grab
- grab_image_start(AcqHandle,-1.0)
- // Process Image1 ...
- // Finish asynchronous grab + start next grab
- grab_image_async(Image2,AcqHandle,-1.0)
- // Process Image2 ...
- close_framegrabber(AcqHandle)
9、get_framegrabber_lut ( : : AcqHandle : ImageRed, ImageGreen,
ImageBlue )
查询AcqHandle的图像采集设备的look-up table
注意:该运算子不能支持所有的图像采集设备
10、grab_data ( : Image, Region, Contours : AcqHandle : Data )
获取AcqHandle的图像采集设备获得的Image、预处理Region和预处理XLD轮廓Contours和预处理控制数据Data。
注意:该运算子不能支持所有的图像采集设备
11、grab_data_async ( : Image, Region, Contours : AcqHandle,MaxDelay: Data )
获取AcqHandle的图像采集设备的Image、预处理Region和预处理XLD轮廓Contours和预处理控制数据Data。(需要特殊图像采集数据)
12、set_framegrabber_lut ( : : AcqHandle, ImageRed, ImageGreen,ImageBlue : )
设置AcqHandle的图像采集设备的look-up table
13、set_framegrabber_param ( : : AcqHandle, Param, Value : )
设置AcqHandle的图像采集设备的特殊参数
相关代码:
- close_all_framegrabbers ()
- open_framegrabber ('DahengCAM', 1, 1, -1, -1, 0, 0, 'default', -1, 'rgb', -1, 'false', 'default', 'default', -1, -1, AcqHandle)
- grab_image (Image, AcqHandle)
- grab_image_async (Image2, AcqHandle, -1)
- get_framegrabber_param (AcqHandle, 'image_width', Value)
- info_framegrabber ('DirectFile', 'info_boards', Information, ValueList)
可以通过调试以上代码,并且查看相关变量的变化,更深入的了解函数的意义。
注意:在本段代码中,使用的是大恒的HV1303的工业摄像机,如果是使用一般的摄像头来采集数据的话,Name值可以设置为Direct_show。
Halcon学习之三:有关图像通道的函数
黑白摄像机会返回每个像素所对应的能量采用结果,这些结果组成了一幅单通道灰度值图像,而对于RGB彩色摄像机,它将返回每个像素所对应的三个采样结果,也就是一幅三通道图像。下面这些是与图像通道有关的函数:
1、access_channel ( MultiChannelImage : Image : Channel : )
获取多通道图像MultiChannelImage的Channel通道的图像Image。
2、append_channel ( MultiChannelImage, Image : ImageExtended : : )
将Image图像的通道与MultiChannelImage的通道叠加得到新图像ImageExtended。
3、channels_to_image ( Images : MultiChannelImage : : )
将多幅单通道图像合并成一幅多通道图像
4、compose2 ( Image1, Image2 : MultiChannelImage : : )
将两幅单通道图像合并为二通道图像。Compose3、Compose4以此类推。
5、count_channels ( MultiChannelImage : : : Channels )
计算MultiChannelImage 的通道个数Channels
6、decompose2 ( MultiChannelImage : Image1, Image2 : : )
将一幅二通道图像转换为两幅单通道图像。Decompose3、Decompose4以此类推。
7、image_to_channels ( MultiChannelImage : Images : : )
将多通道图像转换为多幅单通道图像。
相关例程为:
- * 输入图像
- read_image (Image, 'G:/Halcon/机器视觉/images/claudia.png')
- * 计算图像的通道数
- count_channels (Image, Num)
- * 读取每个通道的图像
- for index := 1 to Num by 1
- access_channel (Image, channel1, index)
- endfor
- decompose3 (Image, image1, image2, image3)
- compose2 (image3, image2, MultiChannelImage1)
- append_channel (MultiChannelImage1, image3, ImageExtended)
相关处理结果为:
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的平均灰度值。
相关例子:
- * 读取图像
- read_image (Image, 'G:/Halcon/机器视觉/images/bin_switch/bin_switch_2.png')
- * 复制图像
- copy_image (Image, DupImage)
- * 区域生长算法
- regiongrowing (Image, Regions, 3, 3, 1, 100)
- * 生成ImageMean
- region_to_mean (Regions, Image, ImageMean)
- * 将Region转换为二进制图像
- region_to_bin (Regions, BinImage, 255, 0, 512, 512)
- * 将Region转换为Label图像
- region_to_label (Regions, ImageLabel, 'int4', 512, 512)
实验结果:
Halcon学习之五:有关图像的定义域的函数
1、add_channels ( Regions, Image : GrayRegions : : )
将Image图像的灰度值赋给区域Regions,得到GrayRegions。
2、change_domain ( Image, NewDomain : ImageNew : : )
改变Image图像的定义域
3、full_domain ( Image : ImageFull : : )
扩张Image图像的定义域到最大。
4、get_domain ( Image : Domain : : )
得到Image图像的定义域
5、rectangle1_domain ( Image : ImageReduced : Row1, Column1, Row2,
Column2 : )
根据矩形坐标(Row1, Column1)、(Row2,Column2)得到区域视为Image图像的定义域。
6、reduce_domain ( Image, Region : ImageReduced : : )
得到图像Image相对于Region区域的图像
例程:
- read_image (Image, 'G:/Halcon/机器视觉/images/brycecanyon1.png')
- * 打开一个新的窗体
- dev_open_window (0, 0, -1, -1, 'black', WindowHandle)
- * 显示图像
- dev_display (Image)
- * 选出两个新的Region
- draw_region (region1, WindowHandle)
- draw_region (region2, WindowHandle)
- add_channels (region1, Image, image_region1)
- change_domain (Image, region2, ImageNew)
- full_domain (image_region1, ImageFull)
- rectangle1_domain (ImageFull, ImageReduced, 100, 100, 300, 500)
- get_domain (image_region1, Domain)
- reduce_domain (Image, region2, ReducedImage)
处理效果如下图所示:
Halcon学习之六:获取Image图像中Region区域的特征参数
area_center_gray ( Regions, Image : : : Area, Row, Column )
计算Image图像中Region区域的面积Area和重心(Row,Column)。
cooc_feature_image ( Regions, Image : : LdGray, Direction : Energy,
Correlation, Homogeneity, Contrast )
计算共生矩阵和推导出灰度特征值
Direction:灰度共生矩阵计算的方向
Energy:灰度值能量
Correlation:灰度值的相互关系
Homogeneity:灰度值的均匀性
Contrast:灰度值的对比度
cooc_feature_matrix ( CoocMatrix : : : Energy, Correlation,
Homogeneity, Contrast )
根据共生矩阵计算灰度特征值
elliptic_axis_gray ( Regions, Image : : : Ra, Rb, Phi )
计算Image图像的Region区域的Ra,Rb和Phi。
entropy_gray ( Regions, Image : : : Entropy, Anisotropy )
Image图像中Region区域的计算熵Entropy和各向异性Anisotropy。
estimate_noise ( Image : : Method, Percent : Sigma )
从单一图像 Image中估计图像的噪声。
Sigma:加性噪声的标准偏差
Method :估计噪声的方法
Method∈{foerstner、immerkaer、least_squares、mean}、
fit_surface_first_order ( Regions, Image : : Algorithm, Iterations,
ClippingFactor : Alpha, Beta, Gamma )
计算一阶灰度平面的灰度矩阵和灰度值的逼近参数。
Algorithm:采用的算法
Algorithm:迭代次数
ClippingFactor:消除临界值的削波系数
fit_surface_second_order ( Regions, Image : : Algorithm, Iterations,
ClippingFactor : Alpha, Beta, Gamma, Delta, Epsilon, Zeta )
计算二阶灰度平面的灰度矩阵和灰度值的逼近参数。
fuzzy_entropy ( Regions, Image : : Apar, Cpar : Entropy )
确定区域Regions的模糊熵 将图像视为模糊集合
Apar为模糊区域的起始点
Cpar为模糊区域的结束点
Entropy为Regions的模糊熵
fuzzy_perimeter ( Regions, Image : : Apar, Cpar : Perimeter )
计算Region区域的模糊周长
gen_cooc_matrix ( Regions, Image : Matrix : LdGray, Direction : )
生成Image图像Region区域的共生矩阵
gray_histo ( Regions, Image : : : AbsoluteHisto, RelativeHisto )
获取Image图像Region区域的灰度相对直方图RelativeHisto和绝对直方图AbsoluteHisto。
注意:Region区域必须先计算过它的直方图。
gray_histo_abs ( Regions, Image : : Quantization : AbsoluteHisto )
获取Image图像Region区域的灰度绝对直方图AbsoluteHisto。
Quantization:灰度值的量化、
gray_projections ( Region, Image : : Mode : HorProjection,
VertProjection )
计算Region区域在水平方向和垂直方向的灰度值投影。
histo_2dim ( Regions, ImageCol, ImageRow : Histo2Dim : : )
计算二通道灰度图像的直方图
intensity ( Regions, Image : : : Mean, Deviation )
计算region区域的灰度平均值和偏差
min_max_gray ( Regions, Image : : Percent : Min, Max, Range )
计算Region区域的最大最小灰度值。
Range:最大灰度值和最小灰度值之间的差距
moments_gray_plane ( Regions, Image : : : MRow, MCol, Alpha, Beta,
Mean )
计算平面的灰度矩阵和灰度值的逼近参数。
plane_deviation ( Regions, Image : : : Deviation )
逼近的图象平面计算灰度值偏差
select_gray ( Regions, Image : SelectedRegions : Features, Operation,
Min, Max : )
根据灰度值选择区域
Features∈{area、row、column、ra、rb、phi、min、max、mean、deviation、plane_deviation、anisotropy、entropy、fuzzy_entropy、fuzzy_perimeter、moments_row、moments_column、alpha、beta}
Operation∈{and、or}
shape_histo_all ( Region, Image : : Feature : AbsoluteHisto,
RelativeHisto )
shape_histo_point ( Region, Image : : Feature, Row,
Column : AbsoluteHisto, RelativeHisto )
获取阈值特征直方图
Feature∈{connected_components、convexity、compactness、anisometry、holes}
程序:
- read_image (Image, 'G:/Halcon/机器视觉/images/bin_switch/bin_switch_3.png')
- regiongrowing (Image, Regions, 3, 3, 1, 500)
- area_center_gray (Regions, Image, Area, Row, Column)
- cooc_feature_image (Regions, Image, 6, 0, Energy, Correlation, Homogeneity, Contrast)
- elliptic_axis_gray (Regions, Image, Ra, Rb, Phi)
- entropy_gray (Regions, Image, Entropy, Anisotropy)
- estimate_noise (Image, 'mean', 20, Sigma)
- fit_surface_first_order (Regions, Image, 'regression', 5, 2, Alpha, Beta, Gamma)
- fit_surface_second_order (Regions, Image, 'regression', 5, 2, Alpha1, Beta1, Gamma1, Delta, Epsilon, Zeta)
- fuzzy_entropy (Regions, Image, 0, 255, Entropy1)
- fuzzy_perimeter (Regions, Image, 0, 255, Perimeter)
- gen_cooc_matrix (Regions, Image, Matrix, 6, 0)
- dev_set_paint ('histogram')
- gray_projections (Regions, Image, 'simple', HorProjection, VertProjection)
- histo_2dim (Regions, Image, Image, Histo2Dim)
运行结果:
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 : )
将多通道平铺。
程序:
- 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)
处理效果:
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)的灰度值
程序:
- read_image (Image, 'G:/Halcon/images/images/claudia.png')
- gen_circle (Circle, 200, 200, 100.5)
- reduce_domain (Image, Circle, ImageReduced)
- gen_image_proto (Image, ImageCleared, 32)
- overpaint_gray (ImageCleared, ImageReduced)
- gen_image_const (Image1, 'byte', 512, 512)
- overpaint_region (Image1, Circle, 255, 'fill')
- *
- read_image (Image2, 'G:/Halcon/images/images/brycecanyon1.png')
- paint_gray (ImageReduced, Image2, MixedImage)
- *
- read_image (Image3, 'G:/Halcon/images/images/pads.png')
- gen_rectangle1 (Rectangle1, 30, 20, 100, 200)
- paint_region (Rectangle1, Image3, ImageResult, 255, 'fill')
- *
- *
- copy_image (Image2, image0)
- copy_image (Image2, image1)
- compose3 (image0, Image2, image1, MultiChannelImage)
- *
- threshold_sub_pix (MultiChannelImage, Border, 128)
- *
- circle := Border[14]
- arrow := Border[16]
- ObjectsConcat := [circle,arrow]
- *
- paint_xld (ObjectsConcat, MultiChannelImage, ImageResult1, [0,1,0,1,1,255])
处理效果: