图像获取程序例1.
1.set_system( : : SystemParameter, Value : )
设置系统参数
2.open_framegrabber ( : : Name, HorizontalResolution,VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn,Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger,CameraType, Device, Port, LineIn : AcqHandle )
输入控制:
3.grab_image( : Image : AcqHandle : )
从AcqHandle指定的图像获取设备中获取图像,输出为获得的图像
4.set_framegrabber_param( : : AcqHandle, Param, Value : )
为AcqHandle指定的图像获取设备设置参数
Param : 'color_space', 'continuous_grabbing', 'external_trigger', 'grab_timeout', 'image_height', 'image_width', 'port', 'start_column', 'start_row', 'volatile'
注意:能够设置的参数不仅仅是上述建议的参数。也可以一次设定多个参数值。
例如:set_framegrabber_param (AcqHandle, 'port', Port0)
set_framegrabber_param (AcqHandle, ['image_width','image_height'], [256, \256])
对DaHengCams能设置的常用额外参数包括:
'adc_level' ---设置A/D转换的级别;
'color_space' ---设置颜色空间
'gain' ---设置相机增益
'grab_timeout' ---设置采集超时终止的时间
'resolution' ---设定相机的采相分辨率,MOD0为最大的分辨率。
'shutter' ---设定相机的曝光时间。
'shutter_unit' ---设定相机曝光时间的单位。
'white_balance' ---相机是否打开白平衡模式,默认为关闭白平衡
5.info_framegrabber( : : Name, Query : Information, ValueList)
查询指定的图像采集接口的信息。
Name为图像采集设备的名称
Query为需要查询的参数名称
Information是指输出的文本信息
ValueList为该图像采集接口的参数值
6.get_image_pointer1(Image : : : Pointer, Type, Width, Height)
获取一个图像通道的指针,输出指针以及图像类型和尺寸。
7.dev_set_part( : : Row1, Column1, Row2, Column2 : )
修改图像显示部分的尺寸。
8.close_all_framegrabbers( : : : )
关闭图像采集设备。
9.count_seconds( : : : Seconds)
测试算子实行时间
* general configuration of HDevelop
set_system ('do_low_error', 'true')
//设置系统参数,在输出窗口只立即显示图像//
dev_update_window ('off')
stop ()
* step 1: connect to the image acquisition device
* -> Please adapt the following lines for your own image acquisition device.
AcqName := 'DaHengCam'
open_framegrabber (AcqName, 1, 1, 0, 0, 0, 0, 'default', -1, 'gray', -1, 'false', 'ntsc', 'default', -1, -1, AcqHandle)
//打开并配置图像采集设备//
stop ()
* step 2: grab a first image and adjust the window size
grab_image (Image, AcqHandle)
//获取图像//
get_image_pointer1 (Image, Pointer, Type, Width, Height) //获取图像通道指针//
dev_close_window ()
dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle) //开新窗口//
dev_set_part (0, 0, Height-1, Width-1)
dev_display (Image)
stop ()
* step 3: grab and process images in a loop (exit with left mouse button)
dev_open_window (0, Width/2 + 8, Width/2, Height/2, 'black', WindowHandleProcess)
dev_set_colored (12)
dev_open_window (Height/2 + 68, 0, Width/2, Height/16, 'light gray', WindowHandleButton)
dev_set_part (0, 0, Height/16 - 1, Width/2 -1)
write_string (WindowHandleButton, ' click here with left mouse button to exit loop')//写字符
dev_set_window (WindowHandle)
dev_set_part (0, 0, Height-1, Width-1)
Button := 0
while (Button # 1)
显示结果为:[1, 0, 3, 2, 5, 6, 7, 8, 9],即对索引3后面元素,数组Tuple1中第4个元素赋值2.
example:
read_image (Mreut, 'mreut')
//读入图像
threshold (Mreut, Region, 190, 255)
//阈值化,输出阈值在190-255的Regions
Areas := []
//定义数组Areas
for Radius := 1 to 50 by 1
//循环
dilation_circle (Region, RegionDilation, Radius) //利用半径为Radius的圆对Region进行膨胀运算,输出
area_center (RegionDilation, Area, Row, Column) //输出区域的面积和中心像素坐标
Areas[Radius-1] := Area
//对数组Areas的第Radius-1个元素进行赋值
endfor
3.基本数组操作极其对应的算子
t := [t1,t2]
t1,t2连接成新的数组
对应算子:tuple_concat
i := |t|
得到数组长度
tuple_length
v := t[i]
选取第i个元素0<= i < |t|
tuple_select
t := t[i1:i2]
选取i1到i1的元素
tuple_select_range
t := subset(t,i) 选取数组t中的第i个元素
tuple_select
t := remove(t,i) 去除数组t中的第i个元素
tuple_remove
i := find(t1,t2) 找到t2数组在t1数组中出现位置索引
t := uniq(t)
在t数组中把连续相同的值只保留一个
tuple_uniq
4.创建数组
(1)gen_tuple_const函数
tuple := gen_tuple_const(100,4711) //创建一个具有100个元素的,每个元素都为4711的数据
tuple_new := gen_tuple_const(|tuple_old|,4711) //创建一个和原来数据长度一样的数据
上面的函数也可以通过如下表达式实现:tuple_new := (tuple_old * 0) + 4711
(2)当数组中的元素不同时,需要用循环语句对数组中的每一个元素赋值
例如:tuple := []
//创建空数组
for i := 1 to 100 by 1
//建立步长为1的循环
tuple := [tuple,i*i]
//将i方的值赋给数组的第i个元素
endfor
//循环结束
endwhile
dev_set_window (WindowHandleButton)
dev_close_window ()
dev_set_window (WindowHandleProcess)
dev_close_window ()
stop ()
* clean up
dev_update_window ('on')
close_all_framegrabbers ()