halcon定位引导

halcon定位引导程序,图像识别饱和度HSV阈值要考虑,数据流处理存到另外一个Tuple,

算子sort region换charactor换个参数方法试试,看看数据流走向,

写的代码记得存下来,之前还用过输入死值分割固定识别区域的方法,虽然稳定但是太low了,



ImageColumn:=[1149,1155,1159,1505,1509,1515,1842,1852,1856]

ImageRow:=[2493,2831,3176,2487,2826,3168,2481,2823,3163]

HandColumn:=[-303.99,-258.55,-213.99,-304.5,-259.1,-214.1,-304.8,-259.2,-214.32]

HandRow:=[372.27,373.15,373.15,420.26,420.49,421.35,465.9,466.2,466.5]

vector_to_hom_mat2d (ImageColumn,ImageRow,HandColumn,HandRow, HomMat2D)

* get_image_size (Image, Width, Height)

* dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)

* dev_display (Image)

* draw_point (WindowHandle, Row1, Column1)

*输入照片的圆心坐标以及吸嘴在圆上时的物理坐标并计算变换矩阵

affine_trans_point_2d (HomMat2D, 909, 2243, Qx, Qy)

*保存变换矩阵

serialize_hom_mat2d (HomMat2D, SerializedItemHandle)

open_file ('1.mat', 'output_binary', FileHandle)

fwrite_serialized_item (FileHandle, SerializedItemHandle)

close_file (FileHandle)

read_image (Image, 'C:/Users/16062/Desktop/Image_20220808164241562.bmp')

*读取图片

* read_image (Image, 'C:/Users/16062/Desktop/1.bmp')

decompose3 (Image, Red, Green, Blue)

trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')

threshold (Saturation, Region4, 0,160)

closing_circle (Region4, RegionClosing1, 12)

fill_up (RegionClosing1, RegionFillUp)

connection (RegionFillUp, ConnectedRegions)

select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 20000, 160000)

sort_region (SelectedRegions, SortedRegions, 'character', 'true', 'column')

count_obj (SelectedRegions, Number)

Tuple1 := []

area_center (SortedRegions, Area, Row, Column)

Area1:=Area

Row1:=Row

Column1:= Column

for Index := 1 to Number by 1

    if (Area1[Index-1]>150000)

        Groove:=Index

        affine_trans_point_2d (HomMat2D, Row1[Index], Column1[Index], Robotx, Roboty)

    else

        Groove:=Index

        Robotx:=-1

        Roboty:=-1

    endif

endfor

* for Groove := 1 to Number by 1


*    area_center (SortedRegion[Groove], Area, Row, Column)


* endfor

*读取出来离线测出来的标定的转换矩阵.mat文件

* open_file ('1.mat', 'input_binary', FileHandle)

* fread_serialized_item (FileHandle, SerializedItemHandle)

* deserialize_hom_mat2d (SerializedItemHandle, HomMat2D_2)

* close_file (FileHandle)

* groove:=0

*槽位计数器

* affine_trans_point_2d (HomMat2D_2, Column, Row, Robotx, Roboty)

* affine_trans_point_2d (HomMat2D_2, 1970, 2254, Robotx, Roboty)

*从左到右从上到下顺序选定区域,写死为4*4

* for Index1 := 0 to 3 by 1

*    for Index2 := 0 to 3 by 1


*    gen_circle (Circle, 385+(650*Index1), 429+(650*Index2),280.5)

*    reduce_domain (Image, Circle, ImageReduced)

*  rgb3_to_gray (ImageReduced, ImageReduced, ImageReduced, ImageGray)

    *根据颜色区别底槽和物料,把三原色拆成三个图

*      decompose3 (ImageReduced, Red, Green, Blue)

    * 第二步颜色转换

*    trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')

  * 根据饱和度来区分底槽和物料,设定阈值

*      threshold (Saturation, Region4, 0,150)

*    groove:=groove+1

    *槽位固定为16个,每次加一

*          select_shape (RegionFillUp, SelectedRegions2, 'area', 'and', 140000, 160000)

    *直接求出和底槽区别出来的区域面积,如果和大片颗粒接近,就是有料,返回中心点坐标,否则就是没料返回-1,-1

*          area_center (Region4, Area1, Row1, Column1)

*          if (Area1>140000 and Area1<160000)

*          Camerax:=Row1

*          Cameray:=Column1

          *应用转换关系,把相机坐标转换为机械臂坐标

*          affine_trans_point_2d (HomMat2D_2, Column1, Row1, Robotx, Roboty)           

*    else

*        Camerax:=-1

*        Cameray:=-1

*    endif

*    endfor

* endfor

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容