halcon定位引導程序物邑,圖像識別飽和度HSV閾值要考慮昼钻,數(shù)據(jù)流處理存到另外一個Tuple袁余,
算子sort region換charactor換個參數(shù)方法試試状答,看看數(shù)據(jù)流走向冷守,
寫的代碼記得存下來,之前還用過輸入死值分割固定識別區(qū)域的方法惊科,雖然穩(wěn)定但是太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
*讀取出來離線測出來的標定的轉(zhuǎn)換矩陣.mat文件
* open_file ('1.mat', 'input_binary', FileHandle)
* fread_serialized_item (FileHandle, SerializedItemHandle)
* deserialize_hom_mat2d (SerializedItemHandle, HomMat2D_2)
* close_file (FileHandle)
* groove:=0
*槽位計數(shù)器
* affine_trans_point_2d (HomMat2D_2, Column, Row, Robotx, Roboty)
* affine_trans_point_2d (HomMat2D_2, 1970, 2254, Robotx, Roboty)
*從左到右從上到下順序選定區(qū)域,寫死為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)
? ? *根據(jù)顏色區(qū)別底槽和物料馆截,把三原色拆成三個圖
*? ? ? decompose3 (ImageReduced, Red, Green, Blue)
? ? * 第二步顏色轉(zhuǎn)換
*? ? trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
? * 根據(jù)飽和度來區(qū)分底槽和物料充活,設定閾值
*? ? ? threshold (Saturation, Region4, 0,150)
*? ? groove:=groove+1
? ? *槽位固定為16個,每次加一
*? ? ? ? ? select_shape (RegionFillUp, SelectedRegions2, 'area', 'and', 140000, 160000)
? ? *直接求出和底槽區(qū)別出來的區(qū)域面積蜡娶,如果和大片顆粒接近混卵,就是有料,返回中心點坐標窖张,否則就是沒料返回-1幕随,-1
*? ? ? ? ? area_center (Region4, Area1, Row1, Column1)
*? ? ? ? ? if (Area1>140000 and Area1<160000)
*? ? ? ? ? Camerax:=Row1
*? ? ? ? ? Cameray:=Column1
? ? ? ? ? *應用轉(zhuǎn)換關(guān)系,把相機坐標轉(zhuǎn)換為機械臂坐標
*? ? ? ? ? affine_trans_point_2d (HomMat2D_2, Column1, Row1, Robotx, Roboty)? ? ? ? ? ?
*? ? else
*? ? ? ? Camerax:=-1
*? ? ? ? Cameray:=-1
*? ? endif
*? ? endfor
* endfor