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