Halcon学习(2)图像获取与相关参数

图像获取程序例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 )
     打开并配置图像采集设备
输入控制:
   Name:图像采集设备的名称
   HorizontalResolution和VerticalResolution:预期的图像采集接口的水平分辨率和垂直分辨率
   ImageWidth和ImageHeight:指预期图像的宽度部分和高度部分。
   StartRow和StartColumn:指显示预期图像的开始坐标
   Field:预期图像是一半的图像或者是完整图像
   BitsPerChannel:每像素比特数和图像通道
   ColorSpace:获取图像的输出形式{gray、raw、rgb、yuv、default}
   Generic:通用参数与设备细节部分的具体意义。
   ExternalTrigger:是否有外部触发
   CameraType:使用相机的类型
   Device:图像获取设别连接到的设备
   Port:图像获取设别连接到的端口
   LineIn :相机输入的多路转接器

   AcqHandle:图像获取设备的Handle


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)
    grab_image (Image, AcqHandle) 
    dev_set_window (WindowHandle)
    dev_display (Image)
    * -> process image (segment with an automatically determined threshold)
    auto_threshold (Image, Regions, 4)//高斯平滑图像并利用直方图分割图像输出区域//
    connection (Regions, ConnectedRegions)2.Insert : 对数组中的某一个值进行赋值。
      Tuple1 := [1,0,3,4,5,6,7,8,9]
      Tuple1[3]:=2
显示结果为:[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进行膨胀运算,输出
                                                   RegionDilation,输出形式仍然为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数组中出现位置索引
                  (or -1 if no match)                          tuple_find

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                                                 //循环结束
    dev_set_window (WindowHandleProcess)
    dev_display (ConnectedRegions)
    * -> check for a click into the window (error handling switched off, otherwise the cursor must always be in the window)
    dev_set_check ('~give_error')
    get_mposition (WindowHandleButton, Row, Column, Button)
    dev_set_check ('give_error')
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 ()


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864