超碰激情 I 成人福利网站 I 淫国产 I 曰批视频免费30分钟成人 I 刘亦菲裸体视频一区二区三区 I 午夜久 I 尤物综合 I 亚洲一区av在线观看 I 欧美亚洲国产精品久久高清 I 欧美老熟妇乱子伦视频 I 无码中出人妻中文字幕av I 久久美女福利视频 I 精品无人区乱码1区2区3区在线 I 性饥渴的农村熟妇 I 色综合综合色 I 少妇人妻88久久中文字幕 I 久久夜色精品国产噜噜av I 老熟妇仑乱视频一区二区 I 男女做爰猛烈叫床视频动态图 I 日本大片一区二区 I 人成午夜免费视频在线观看 I 激情婷婷av I 男女下面一进一出免费视频网站 I 久久影视一区 I 午夜污网站 I 先锋人妻无码av电影 I 久久久久久久岛国免费网站 I 又粗又大又黄又硬又爽免费看 I 人妻无码免费一区二区三区 I www.色成人100 I 欧美高清网站 I 精品国产第一页 I 国产suv一区二区三区88区 I 橹图极品美女无圣光 I 午夜宅男欧美

產品分類

當前位置: 首頁 > 工業電氣產品 > 端子與連接器 > 線路板連接器 > FFC連接器

類型分類:
科普知識
數據分類:
FFC連接器

VPLC系列機器視覺運動控制一體機快速入門(三)

發布日期:2022-04-25 點擊率:69

  • 關鍵詞:正運動技術,機器視覺,運動控制


  • 摘要:今天,正運動技術為大家分享一下VPLC系列機器視覺運動控制一體機快速入門(三)——基于形狀匹配的視覺定位。


上期課程,我們講述了機器視覺方案實施的基礎即相機的基本使用內容,我們通過上期課程已經能實現使用ZDevelop軟件獲取圖像進行處理。


本期課程我們和大家一起分享機器視覺方案中常用的基于形狀匹配的視覺定位功能。


image.png


什么是視覺定位?


視覺定位是指在視覺檢測中通過學習特定的模板或某些固定的特征,在檢測區域內搜索滿足條件的特征,并返回特征在圖像坐標中的位置信息,如坐標位置X、坐標位置Y、角度。


什么是形狀匹配?


形狀匹配是基于邊緣方向梯度的匹配,它是提取ROI中的邊緣特征結合灰度信息創建模板,然后在檢測區域ROI范圍內搜索與模板的輪廓特征滿足一定相似程度的產品特征,并返回對應位置信息。


image.png


形狀匹配原理圖


形狀匹配特點


1.適應性強:可適應光照和圖像的灰度變化。


2.兼容性強:可以支持搜索缺失局部邊緣、有噪聲干擾、有輕微變形和失焦的目標。


3.多目標搜索:支持同時搜索同一模板下的多個匹配目標。


4.支持旋轉和縮放:在目標圖像存在旋轉或縮放的情況下仍然能匹配到目標,但是需要在設定的旋轉和縮放比例范圍內。


模板選擇


使用形狀匹配功能的前提是檢測目標要有唯一且固定的特征。


1.在選擇模板時,需要確保特征是檢測目標唯一存在的特征,否則無法與其他檢測目標區分。


2.盡量選擇圖像清晰形狀完整的標準產品作為模板,避免摻入噪點等干擾因素。


3.盡量避免選擇對稱的特征作為模板。


image.png


如圖,閃電是目標1唯一的特征,可以將目標1和目標2進行區分。


image.png


模板選擇的原則


image.png


目標定位


image.png


在目標輪廓特征清晰且定位精度要求不高時,可直接使用形狀匹配輸出的位置結果做定位項目。


產品計數


image.png


對具有相同形狀特征的產品進行計數統計。


位置跟隨


image.png


當需要檢測的目標位置不固定時,一些檢測功能的ROI位置無法確定如檢測直線、檢測圓形等,我們可以利用檢測目標周邊有固定距離的特征進行位置跟隨。


image.png


image.png


形狀匹配流程圖


實例演示


新建項目→新建HMI文件→新建main.bas文件,用于編寫界面響應函數→新建global_variable.bas文件用于存放全局變量并開啟HMI自動運行任務→新建InitLocator.bas文件用于初始化測量參數→新建camera.bas文件用于實現相機采集功能→新建draw.bas文件用于更新繪制圖形刷新界面→文件添加到項目。


image.png


設計主界面。


image.png


在global_variable.bas文件中定義全局變量。


'''''全局變量大部分使用數組結構'''''

''注:basic編程中很多函數會以TABLE(系統的數據結構)做為參數

''在這里table均是做為中間變量

''table 0-20 作為匹配時使用到的中間變量

''table 50-70 作為roi繪制時的中間變量使用


''table 21-22,表示鼠標按鍵控件坐標系

''table 31-35,表示控件坐標轉換后對應的圖像坐標

''table 111-114,表示定位器區域roi參數,屬于控件坐標系

''table 121-124,表示橡皮擦區域roi參數,屬于控件坐標系


'***********定義程序任務相關變量**********************


'主任務狀態

'0 - 未初始化

'1 - 停止

'2 - 運行中

'3 - 正在停止

GLOBAL DIM main_task_state

main_task_state = 1


'運行任務開關

GLOBAL DIM run_switch

run_switch = 0


'采集任務開關

'0 - 停止采集

'1 - 請求采集

GLOBAL DIM grab_switch

grab_switch = 0


'定位檢測主任務id - 10

GLOBAL DIM main_task_id

main_task_id = 10


'相機連續采集線程id - 7

GLOBAL DIM grab_task_id

grab_task_id = 7


'***********結束定義程序任務相關變量******************


'***********定義相機采集相關變量**********************


'相機種類,"",此處使用海康相機-"mvision"

GLOBAL DIM CAMERA_TYPE(100)

'CAMERA_TYPE = "mindvision;basler;mvision;huaray;basler;zmotion"

CAMERA_TYPE = "mvision"


'相機個數

GLOBAL cam_num

cam_num = 0


'相機模式,-1 連續采集,0-觸發采集

GLOBAL cam_mode

cam_mode = 0


'***********結束定義相機采集相關變量******************


'定義返回主界面標志,1-已返回,0-未返回

GLOBAL DIM d_is_rtn_loc 

d_is_rtn_loc = 1


'***********定義模板相關變量*************************


'定義創建模板標志位,1-已創建模板,0-未創建模板

GLOBAL DIM d_is_creModel

d_is_creModel = 0


'學習模板參數,starAngle、endAngle、minScale、maxScale、thresh、numlevel、reduce、angleStep、scaleStep

GLOBAL DIM d_mod_param(9)


'***********結束定義模板相關變量**********************


'***********定義編輯模板相關變量*********************


'定義編輯模板標志,0-表示不編輯模板,1-表示編輯模板

GLOBAL DIM d_edit_m

d_edit_m = 0


'定義使用橡皮擦功能標志,0-表示恢復擦除的區域,1-表示擦除區域

GLOBAL DIM d_isMask_m

d_isMask_m = 1


'定義橡皮擦的roi參數,依次是矩形左上角和右下角圖像坐標x、y、x、y

GLOBAL DIM d_locator_roi(4),d_eraser_roi(4)


'定義正方形橡皮擦尺寸寬度

GLOBAL DIM d_eraser_size

d_eraser_size = 5


 '定義界面控件上橡皮擦的矩形區域

 GLOBAL DIM c_rect(4)


'定義鼠標狀態標志,0-表示鼠標處于松開狀態,1-表示鼠標處于按下狀態

GLOBAL DIM d_mouse_s

d_mouse_s = 0


'***********結束定義編輯模板相關變量******************


'***********定義匹配檢測相關變量*********************


'匹配檢測參數,minScore、matchNum、minDist、thresh、accuracy、speed、polor

GLOBAL DIM d_match_param(7)


'定義學習模板的roi參數和橡皮擦的roi參數,依次是矩形左上角和右下角圖像坐標x、y、x、y

GLOBAL DIM d_locator_roi(4),d_eraser_roi(4)


'匹配結果,score、x、y、angle、scale, 目前對于多目標匹配也只存第一個目標

GLOBAL DIM d_match_rst(5)


GLOBAL DIM d_match_time '定義匹配定位消耗的時間變量

d_match_time = 0


'***********結束定義匹配檢測相關變量******************


'定義程序執行過程中緩存中間圖片和結果圖片的變量

GLOBAL ZVOBJECT grabImg

GLOBAL ZVOBJECT subImg,copy_subImg,colorSubImg, s_mod

GLOBAL ZVOBJECT modRe


RUN"Hmi1.hmi",1


在InitLocator.bas文件中初始化測量參數。


end


GLOBAL SUB init_meas_param()   '初始化測量參數


  '初始化定位器roi參數

  d_locator_roi(0) = 240    '左上角x

  d_locator_roi(1) = 180    '左上角y

  d_locator_roi(2) = 400    '右下角x

  d_locator_roi(3) = 300    '右下角y


  '初始化模板參數

  d_mod_param(0) = -180   '起始角度

  d_mod_param(1) = 180    '終止角度

  d_mod_param(2) = 1      '最小縮放

  d_mod_param(3) = 1      '最大縮放

  d_mod_param(4) = 80     '閾值

  d_mod_param(5) = 0      '默認金字塔層數

  d_mod_param(6) = 0      '默認約簡特征點

  d_mod_param(7) = 0      '默認角度步長

  d_mod_param(8) = 0      '默認縮放步長


  '初始化匹配測量參數

  d_match_param(0) = 50   '最小分數

  d_match_param(1) = 1    '匹配個數

  d_match_param(2) = 0    '默認最小間距

  d_match_param(3) = 40   '最小閾值

  d_match_param(4) = 0    '精度

  d_match_param(5) = 9    '速度

  d_match_param(6) = 0    '極性


  '初始化匹配定位結果

  d_match_rst(0) = 0       '分數

  d_match_rst(1) = 0       '位置X

  d_match_rst(2) = 0       '位置Y

  d_match_rst(3) = 0       '角度

  d_match_rst(4) = 0       '比例


  '初始化匹配定位消耗時間

  d_match_time = 0


END SUB


關聯主界面值顯示控件變量。


image.png


在main.bas文件中添加主界面初始化函數。


'HMI界面初始化函數,上電執行一次

GLOBAL SUB hmi_init()


  grab_switch = 0                          '初始化采集任務開關,不開啟采集任務

  main_task_state = 1                      '初始化定位檢測主任務狀態為停止狀態1

  ZV_LATCHSETSIZE(0, HMI_ConTROLSIZEX(10, 2), HMI_ConTROLSIZEY(10, 2)) '設置鎖存的大小

  init_meas_param()                       '初始化測量參數


  ZV_IMGGENConST(subImg,40,30,1,0,0)      '初始化模板子圖像


  '初始化一些全局參數

  ZVOBJECT contlist1, tsContlist1, mat_rigid1

  ZVOBJECT contlist2, tsContlist2, mat_rigid2


  ZV_READIMAGE(grabImg,"1.bmp",1)      '讀取.../flash目錄下的show.bmp的灰度圖像,存放到grabImg變量中

  ZV_LATCH(grabImg,0)                  '顯示到鎖存通道0中,作為顯示區域背景圖片


END SUB


在camera.bas文件中添加主界面中采集相關按鈕響應的函數并關聯動作函數。


image.png


end


'主界面按下掃描相機按鈕時響應的函數

GLOBAL SUB cam_scan_all()

  ZV_SETSYSINT("LogLevel", 7)     '設置控制器信息

  ZV_SETSYSSTR("DataDir","")


  CAM_SCAN(CAMERA_TYPE)           '掃描相機,CAMERA_TYPE="mvision"

  cam_num = CAM_COUNT()           '獲取掃描到的相機數量

  if (0 = cam_num) then           '如果相機數量=0,打印提示信息

    ? "未找到相機"


    return                       '退出子函數,不往下執行

  endif

  ?"cam_num = " cam_num            '如果掃描到相機,打印相機數量

    cam_mode = 0                     '設置軟觸發采集


  CAM_SEL(0)                       '選擇掃描到的第一個相機進行操作

  CAM_SETEXPOSURE(100000)         '設置相機曝光時間為100000us      

  CAM_SETMODE(cam_mode)            '設置軟件觸發模式

  CAM_START(0)                     '開啟相機  


END SUB


'主界面按下單次采集按鈕執行的函數

GLOBAL SUB btn_grab()

    if cam_num = 0   then 

       ?"請先掃描相機!"

     return 

    endif


  CAM_SETPARAM("TriggerSoftware", 0)

  CAM_GET(grabImg, 0)

  ZV_LATCH(grabImg, 0)


  ZV_IMGINFO(grabImg,3000)       '獲取grabImg變量緩存的圖片的基本信息,并存放到起始地址為3000的table數組中


end sub


'主界面按下連續采集按鈕響應的函數

GLOBAL SUB btn_cgrab()

    if grab_switch =1 then 

       ?"正在連續運行中,請勿重復操作!"

     return 

  endif


  if cam_num = 0   then 

       ?"請先掃描相機!"

     return 

    endif


  grab_switch = 1

  if (1 = grab_switch) then

    if (0 = PROC_STATUS(grab_task_id)) then

      RUNTASK  grab_task_id, grab_task

    endif

  endif


end sub


'采集任務實現函數

grab_task:

  while(1)

    if (0 = grab_switch) then

      exit while

    endif


      CAM_START(0)                     '開啟相機  

      CAM_SETPARAM("TriggerSoftware", 0)

      CAM_GET(grabImg, 0)

      ZV_LATCH(grabImg, 0)

  wend

END


'主界面按下停止采集按鈕響應的函數

GLOBAL SUB btn_stopCgrab()

    if grab_switch =0 then 

       ?"未開啟連續采集!"

     return 

  endif


  grab_switch = 0

end sub

image.png


點擊[元件]→[新建窗口],新建學習模板窗口,設計窗口布局。


image.png


注意:需要設置窗口壟斷屬性。


在draw.bas文件中添加主界面【學習模板】按鈕響應的函數并關聯動作函數。



'主界面按下學習模板按鈕時響應的函數

GLOBAL SUB btn_sel_loc()    

  ZV_LATCHSETSIZE(0, HMI_ConTROLSIZEX(11, 60), HMI_ConTROLSIZEY(11, 60)) '設置創建模板窗口鎖存通道0的鎖存大小

  SET_COLOR(RGB(0,255,0))   '指定draw指令使用的顏色


  ZV_LATCHCLEAR(0)           '將鎖存通道0清空

  ZV_LATCH(grabImg, 0)       '顯示采集圖像顯示到鎖存通道0中

  ZV_LATCH(colorSubImg, 1)   '顯示模板圖像顯示到鎖存通道1中


  '圖像roi坐標轉控件roi

  is_redraw = 0

  d_is_rtn_loc = 0

  TABLE(111, d_locator_roi(0), d_locator_roi(1),d_locator_roi(2),d_locator_roi(3)) 

  ZV_POSFROMIMG(0, 2, 111, 111) '圖像坐標轉換到HMI控件坐標

  HMI_SHOWWINDOW(11)


END SUB



image.png


在draw.bas文件中添加模板區域更新繪制函數。


'根據鼠標操作更新定位器的區域即學習模板的有效區域

GLOBAL SUB update_locator()


  if mouse_scan(21) = 1 then      '掃描鼠標按下操作

    is_set_roi_m_down = 1

    sr_mpos_x = table(21)

    sr_mpos_y = table(22)

    hit_pos = ZV_HMIADJRECT(sr_mpos_x, sr_mpos_y, 111, -1) '只有按下時可以改變擊中位置

    is_redraw = 1

    endif


    if mouse_scan(21) = -1 then      '掃描鼠標松開操作

    is_set_roi_m_down = 0

    sr_mpos_x = table(21)

    sr_mpos_y = table(22)

    ZV_HMIADJRECT(sr_mpos_x, sr_mpos_y, 111, hit_pos)

    is_redraw = 1

    endif


  if (is_set_roi_m_down and MOUSE_state(21)) then

    sr_mpos_x = table(21)

    sr_mpos_y = table(22)

    ZV_HMIADJRECT(sr_mpos_x, sr_mpos_y, 111, hit_pos)

    is_redraw = 1

  endif


  if (1 = is_redraw) then

    '控件roi坐標轉圖像roi坐標

    is_redraw = 0

    ZV_POSTOIMG(0, 2, 111, 50) 'TABLE(50)作為中間變量臨時使用

    d_locator_roi(0) = TABLE(50)

    d_locator_roi(1) = TABLE(51)

    d_locator_roi(2) = TABLE(52)

    d_locator_roi(3) = TABLE(53)

    SET_REDRAW

  endif


END SUB


'根據更新的鼠標位置坐標繪制定位器roi

GLOBAL SUB draw_locator()

  DRAWRECT(TABLE(111), TABLE(112), TABLE(113), TABLE(114))


  local cx,cy

  cx = (TABLE(111) + TABLE(113)) / 2

  cy = (TABLE(112) + TABLE(114)) / 2


  DRAWLINE(cx-5, cy, cx+5, cy)  '中心十字線

  DRAWLINE(cx, cy-5, cx, cy+5)


END SUB



在main.bas文件中添加【截取模板】按鈕響應的函數并關聯動作函數。


'創建模板界面按下截取模板按鈕后響應的函數

global sub btn_getSubImg()

  LOCAL mod_w,mod_h

  ZV_IMGGETSUB(grabImg, subImg, d_locator_roi(0), d_locator_roi(1), d_locator_roi(2)-d_locator_roi(0)+1, d_locator_roi(3)-d_locator_roi(1)+1)


  ZV_IMGINFO(subImg,0)

  mod_w = TABLE(0)

  mod_h = TABLE(1)


  ZV_REGENRECT(modRe,0,0,mod_w, mod_h)

  ZV_LATCHCLEAR(1)

  ZV_LATCH(subImg, 1)


end sub


image.png


點擊[元件]→[新建窗口],新建編輯模板窗口,設計窗口布局。


image.png


注意:需要設置窗口壟斷屬性。


在draw.bas文件中添加創建模板界面【橡皮擦】按鈕響應的函數并關聯動作函數。


'創建模板界面按下橡皮擦按鈕時響應的函數

GLOBAL SUB btn_sel_erase()

  ZV_LATCHSETSIZE(1, HMI_ConTROLSIZEX(12, 1), HMI_ConTROLSIZEY(12, 1)) '設置鎖存的大小

  SET_COLOR(RGB(0,255,0))             '設置繪制時畫筆使用的顏色


  ZV_LATCHCLEAR(1)                    '清空鎖存

  ZV_IMGCOPY(subImg, copy_subImg)      '復制模板子圖像到copy_subImg圖像變量中

  ZV_REGION(copy_subImg, modRe, 1, 0)  '在模板圖像上繪制modRe圖像的非有效區域,繪制顏色為黑色,用于掩模

  ZV_LATCH(copy_subImg, 1)             '顯示復制的模板圖



  HMI_SHOWWINDOW(12)                  '打開編輯模板窗口


end sub


image.png


在draw.bas文件中添加橡皮擦更新繪制函數。


'根據鼠標操作更新橡皮擦擦除/恢復區域的位置

GLOBAL SUB update_eraser()

  DIM c_size_eraser '橡皮擦在控件上對應的尺寸

  DIM eraser_pos_x,eraser_pos_y 

  d_mouse_s = MOUSE_STATE(21)     '鼠標處于按下狀態時

  eraser_pos_x = TABLE(21)

  eraser_pos_y = TABLE(22)


  c_size_eraser = ZV_LENFROMIMG(0, d_eraser_size)    '將橡皮擦的圖像尺寸轉換成控件尺寸

  c_rect(0, eraser_pos_x - c_size_eraser, eraser_pos_y - c_size_eraser, eraser_pos_x + c_size_eraser, eraser_pos_y + c_size_eraser)

  '繪制以(eraser_pos_x,eraser_pos_y)為中心,2*c_size_eraser為邊長的正方形橡皮擦區域


  DIM hmi_w,hmi_h

  if (eraser_pos_x >= c_size_eraser) and (eraser_pos_y >= c_size_eraser) and  (eraser_pos_x <= HMI_ConTROLSIZEX(12, 1) - c_size_eraser)and (eraser_pos_y <= HMI_ConTROLSIZEy(12, 1) - c_size_eraser) THEN

    SET_REDRAW(0,0, HMI_ConTROLSIZEX(12, 1), HMI_ConTROLSIZEY(12, 1))'重新繪制編輯模板窗口上的鎖存通道0區域

  endif


  if d_mouse_s = 1 and d_edit_m = 1 then '如果鼠標處于按下狀態且編輯模板標志=1時

    btn_pro_eraser()                   '執行處理橡皮擦函數

  endif


END SUB


'處理橡皮擦函數

global sub btn_pro_eraser()

  ZVOBJECT tmp_re

  TABLE(121, c_rect(0), c_rect(1))

  ZV_POSTOIMG(1, 1, 121, 121)

  ZV_REGENRECT(tmp_re, TABLE(121), TABLE(122), 2 * d_eraser_size + 1, 2 * d_eraser_size + 1)


  if (d_isMask_m = 1) then '屏蔽

    ZV_REDIFF(modRe, tmp_re, modRe)   '計算modRe和tmp_re的差集并存放到modRe中

  else  '恢復

    ZV_REUNIOn(modRe, tmp_re, modRe)  '計算modRe和tmp_re的并集并存放到modRe中

  endif


  ZV_IMGCOPY(subImg, copy_subImg)        '復制模板子圖像到copy_subImg圖像變量中

  ZV_REGION(copy_subImg, modRe, 1, 0)    '在模板圖像上繪制modRe圖像的非有效區域,繪制顏色為黑色,用于掩模

  ZV_LATCH(copy_subImg, 1)               '顯示復制的模板圖


end sub


'更新繪制橡皮擦區域

GLOBAL SUB draw_eraser()

  if d_edit_m = 0 then                   '如果編輯模板標志     

    return                             '返回子函數,不繼續往下執行

  endif


  DRAWRECT(c_rect(0), c_rect(1), c_rect(2), c_rect(3))'繪制橡皮擦區域


END SUB


在main.bas文件中添加編輯模板界面【創建模板】按鈕響應的函數并關聯動作函數。

'編輯模板界面按下創建模板按鈕時響應的函數

GLOBAL SUB btn_loc_creModel()

  d_is_creModel = 1

  ZV_SHAPECREATERE(subImg, modRe,s_mod, d_mod_param(0), d_mod_param(1), d_mod_param(2), d_mod_param(3), d_mod_param(4), d_mod_param(5), d_mod_param(6), d_mod_param(7), d_mod_param(8))

    '創建模板


  ZV_SHAPEConTOURS(s_mod, contlist1, 0)   '獲取第0層金字塔上的模板輪廓

  ZV_GRAYTORGB(subImg, colorSubImg)        '灰度圖轉換成RGB圖

  ZV_IMGINFO(colorSubImg, 0)               '獲取colorSubImg圖像信息,并存放到table0中

  ZV_GETRIGIDVECTOR(mat_rigid1, 0, 0, 0, TABLE(0)/2, TABLE(1)/2, 0)'計算剛性變換矩陣

  ZV_ConTAFFINE(contlist1, mat_rigid1, tsContlist1)'對輪廓或輪廓序列進行仿射變換

  ZV_ConTLIST(colorSubImg, tsContlist1, ZV_COLOR(0, 255, 0), 0)'在colorSubImg圖像上繪制綠色的輪廓序列


  ZV_LATCHCLEAR(2)

  ZV_LATCH(colorSubImg, 2)


end sub


image.png


在draw.bas文件中添加編輯模板界面【確定】按鈕響應的函數并關聯動作函數。


'編輯模板界面按下確定按鈕時執行的函數

GLOBAL SUB btn_erase_cfm()

  ZV_LATCHCLEAR(0)

  ZV_LATCH(grabImg, 0) '顯示圖像在鎖存上

  HMI_CLOSEWINDOW(12)  '關閉編輯模板窗口


END SUB


image.png


在main.bas文件中添加創建模板界面【測試】按鈕響應的函數并關聯動作函數。


'創建模板界面按下測試按鈕時響應的函數

GLOBAL SUB btn_loc_test()

  if (d_is_creModel = 0) then

      ?"未創建模板!"

    return

  endif


  '開始匹配

  TICKS = 0

  ZVOBJECT match_rst, sImg, colorImg

  ZV_GAUSSBLUR(grabImg, sImg, 3)

  ZV_SHAPEFIND(s_mod, sImg, match_rst, d_match_param(0), d_match_param(1), d_match_param(2), d_match_param(3), d_match_param(4), d_match_param(5), d_match_param(6))


  ZV_MATINFO(match_rst, 0)

  ZV_GRAYTORGB(sImg, colorImg)


  if TABLE(0) > 0 then

    local rowr

    for rowr = 0 to TABLE(0)-1

      ZV_MATGETROW(match_rst, rowr, 5, 3)  '獲取match_rst矩陣中第rowr行的數據到table中,table最大長度5


      if(rowr = 0) then

        d_match_rst(0) = TABLE(3)

        d_match_rst(1) = TABLE(4)

        d_match_rst(2) = TABLE(5)

        d_match_rst(3) = TABLE(6)

        d_match_rst(4) = TABLE(7)


        ZV_GETRIGIDVECTOR(mat_rigid1, 0, 0, 0, TABLE(4), TABLE(5), TABLE(6))'計算剛性變換矩陣

        ZV_ConTAFFINE(contlist1, mat_rigid1, tsContlist1)'對輪廓或輪廓序列進行仿射變換

        ZV_ConTLIST(colorImg, tsContlist1, ZV_COLOR(0, 255, 0), 0)'在colorSubImg圖像上繪制綠色的輪廓序列

      endif

    next

  else

    d_match_rst(0) = -1

    d_match_rst(1) = -1

    d_match_rst(2) = -1

    d_match_rst(3) = -1

    d_match_rst(4) = -1

  endif


  d_match_time = abs(TICKS) '匹配時間

  ZV_LATCH(colorImg, 0)


end sub



image.png


在draw.bas文件中添加創建模板界面【確定】按鈕響應的函數并關聯動作函數。


圖片


'創建模板界面按下確定按鈕時響應的函數

GLOBAL SUB btn_loc_cfm()

  grab_switch = 0 '關閉補正源的連續采集

  d_is_rtn_loc = 1

  ZV_LATCHCLEAR(0)

  ZV_LATCH(grabImg, 0) '顯示圖像在鎖存上

  ZV_LATCH(grabImg, 1) '顯示圖像在鎖存上


  HMI_CLOSEWINDOW(11)


END SUB

image.png


在main.bas文件中添加主界面【單次執行】按鈕響應的函數并關聯動作函數。


'主界面按下單次執行按鈕時響應的函數

GLOBAL SUB btn_test()

  btn_grab()           '單次采集圖像

  btn_loc_test()       '匹配測試函數


END SUB

image.png


在main.bas文件中添加主界面【連續運行】按鈕響應的函數并關聯動作函數。


'主界面點擊連續運行按鈕時響應的函數

GLOBAL SUB btn_run()

    if(run_switch = 1) then 

     ?"已開啟連續運行,請勿重復操作!"

     return 

  endif


  run_switch = 1

  if (1 = run_switch) then

    if (0 = PROC_STATUS(main_task_id)) then

      RUNTASK  main_task_id, main_task

    endif

  endif

END SUB


'連續運行主任務內容

main_task:

  while(1)

    if (0 = run_switch) then

      exit while

    endif


    '以下執行相關定位操作

    btn_grab()

    btn_loc_test()

  wend


END


image.png


在main.bas文件中添加主界面【停止運行】按鈕響應的函數并關聯動作函數。


'主界面點擊停止執行按鈕時響應的函數

GLOBAL SUB btn_stop()

    if(run_switch = 0) then 

     ?"未開啟連續運行!"

     return 

  endif


  run_switch = 0

END SUB

image.png

仿真演示效果


image.png


本次,VPLC系列機器視覺運動控制一體機快速入門(三)——基于形狀匹配的視覺定位就分享到這里,更多精彩內容請關注“正運動小助手”公眾號。


本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。


掌握運動控制核心技術和實時工控軟件平臺技術的企業。



下一篇: PLC、DCS、FCS三大控

上一篇: EtherCAT總線運動控制

推薦產品

更多