halcon例程学习笔记(4)---count_fish_sticks.hdev基本函数使用

通过本例程巩固了对剖面灰度值的描述,并进行测量,算子使用同“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

image.png

image.png


--------------------- 

作者:不系之舟913 

来源:CSDN 

原文:https://blog.csdn.net/lixianjun913/article/details/11761829 

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》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