halcon例程学习笔记(4)---count_fish_sticks.hdev基本函数使用
来源:互联网 发布:网络管理安全防御措施 编辑:程序博客网 时间:2024/05/24 15:36
通过本例程巩固了对剖面灰度值的描述,并进行测量,算子使用同“halcon例程学习笔记(2)”。此例程进一步学习了halcon中的基本函数的使用方法:
subset 求取一个数组的子集
find 查找相应条件的值的位置索引
数组的错位减法的使用。
其它基本图像处理基本算子,可以查阅halcon使用手册,详细了解。
例程代码如下:
dev_update_off ()
dev_close_window ()
read_image (Image, 'food/fish_stick_package_01')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width*.9, Height*.9, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_open_window (0, Width*.9+12, 420, 150, 'black', GraphicsWindow)
set_display_font (GraphicsWindow, 16, 'mono', 'true', 'false')
dev_set_color ('yellow')
*
* Read and process the images
NumImages := 6
for Index := 1 to NumImages by 1
read_image (Image, 'food/fish_stick_package_'+Index$'02')
*
* Segment the content of the fish stick package
threshold (Image, Region, 100, 255)
closing_circle (Region, RegionClosing, 5)
fill_up (RegionClosing, RegionFillUp)
difference (RegionFillUp, RegionClosing, RegionDifference)
fill_up (RegionDifference, RegionFillUp1)
closing_circle (RegionFillUp1, RegionClosing1, 10)
smallest_rectangle2 (RegionClosing1, Row, Column, Phi, Length1, Length2)
MeasureLength1 := Length1 - 5
*
* Measure the gray value profile of the fish stick package
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, 80)
gen_measure_rectangle2 (Row, Column, Phi, MeasureLength1, 60, Width, Height, 'nearest_neighbor', MeasureHandle)
measure_projection (Image, MeasureHandle, GrayValues)
close_measure (MeasureHandle)
create_funct_1d_array (GrayValues, Function)
*获得函数局域最大最小值点的位置
local_min_max_funct_1d (Function, 'plateaus_center', 'true', Minima, Maxima)
*
* Evaluate the gray profile
get_y_value_funct_1d (Function, Minima, 'mirror', YValues)
*查找在YValues值上下波动50的值并求取Minima中的子集
SelectedMinima := subset(Minima,find(sgn(YValues-50),-1))
Num := |SelectedMinima|+1
*产生一维数组,
StickEdges := [-5, SelectedMinima, 2*MeasureLength1+5]
*错位减法
StickWidth := StickEdges[1:Num]-StickEdges[0:Num-1]
*
* Display the results
BorderX := [ Column+cos(Phi)*(MeasureLength1*((StickEdges-MeasureLength1)/MeasureLength1))]
BorderY := [ Row-sin(Phi)*(MeasureLength1*((StickEdges-MeasureLength1)/MeasureLength1))]
CenterX := (BorderX[1:Num]+BorderX[0:Num-1])/2
CenterY := (BorderY[1:Num]+BorderY[0:Num-1])/2
gen_cross_contour_xld (BorderCross, BorderY, BorderX, 15, rad(45))
gen_cross_contour_xld (CenterCross, CenterY, CenterX, 15, rad(45))
*查找StickWidth数组中大于20的点坐标
IndexFish := find(sgn(StickWidth-20),1)
*查找StickWidth数组中小于20的点坐标
IndexFishx := find(sgn(StickWidth-20),-1)
if (IndexFish # -1)
NumFish := |IndexFish|
*产生多个矩形框
gen_rectangle2 (FishRegions, subset(CenterY,IndexFish), subset(CenterX,IndexFish), gen_tuple_const(NumFish,Phi), subset(StickWidth,IndexFish)/2, gen_tuple_const(NumFish,Length2)/2)
else
NumFish := 0
endif
*创建一个空的图像区域
gen_empty_region (Flipped)
IndexFlipped := find(sgn(StickWidth-48),1)
if (IndexFlipped # -1)
NumFlipped := |IndexFlipped|
gen_rectangle2 (Flipped, subset(CenterY,IndexFlipped), subset(CenterX,IndexFlipped), gen_tuple_const(NumFlipped,Phi), subset(StickWidth,IndexFlipped)/2, gen_tuple_const(NumFlipped,Length2)/2)
else
NumFlipped := 0
endif
*
dev_set_window (GraphicsWindow)
dev_clear_window ()
plot_funct_1d (GraphicsWindow, Function)
dev_set_window (WindowHandle)
dev_clear_window ()
dev_display (Image)
dev_set_color ('yellow')
dev_set_line_width (1)
dev_display (FishRegions)
dev_display (BorderCross)
dev_set_color ('red')
dev_set_line_width (3)
dev_display (Flipped)
if (NumFish=15 and NumFlipped =0)
String := 'OK'
Color := 'green'
else
String := 'Not OK'
Color := 'red'
endif
String[1] := 'Number of fish sticks:'+NumFish$'3'
if (NumFish # 15)
Color := [Color,'red']
else
Color := [Color,'white']
endif
if (NumFlipped # 0)
String[2] := 'Flipped fishsticks: '+NumFlipped$'3'
Color := [Color,'red']
endif
disp_message (WindowHandle, String, 'window', 12, 12, Color, 'false')
dev_set_color (Color[0])
dev_display (Rectangle)
if (Index<NumImages)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
endif
endfor
- halcon例程学习笔记(4)---count_fish_sticks.hdev基本函数使用
- halcon例程学习笔记(2)----check_smd_tilt.hdev
- halcon例程学习笔记(7)---检测漏焊board.hdev
- halcon例程学习笔记(8)---瓶子编号识别bottle2.hdev
- halcon例程学习笔记(9)---制药的检测check_blister.hdev
- halcon例程学习笔记(10)---图像灰度共生矩阵cooc_feature_image.hdev
- halcon例程学习笔记(10)---图像灰度共生矩阵cooc_feature_image.hdev
- halcon学习菜鸟级笔记---老老实实学例程1Codabar.hdev
- halcon学习笔记之(一)label_word_process_mlp.hdev
- halcon例程学习笔记(1)---一维函数的使用
- Creat_average_shape_model.hdev例程相关学习(一)
- Creat_average_shape_model.hdev例程相关学习(二)
- Creat_average_shape_model.hdev例程相关学习(三)
- decode_bar_code_rectangle2.hdev相关例程学习(解码)
- Creat_average_shape_model.hdev例程相关学习(一)
- HALCON 11例程1 25industrial.hdev
- Halcon基本例程(二)
- halcon例程学习笔记(11) 一维码、二维码识别
- 内存_ARM 页目录以及页表
- Android中Message机制的灵活应用
- 矩阵填数-倒填、螺旋、蛇形
- android 如何从应用返回待机界面
- 我的第一个c#程序:低端弱智的代码生成器
- halcon例程学习笔记(4)---count_fish_sticks.hdev基本函数使用
- 关于使用POI实现excel导出
- hibernate的缓存
- 分类算法之贝叶斯网络(Bayesian networks)
- 批处理fc命令
- JAVA EE 项目常用知识之 重写和重载 ArrayList、Vector区别
- python 小技巧(函数定义)
- 启动informix服务报1069错误(由于登录失败而无法启动服务)解决方法
- Java:HTTP页面请求的状态值