超碰激情 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 午夜宅男欧美

產品分類

當前位置: 首頁 > 工業控制產品 > 自動化控制 > PLC可編程控制器

類型分類:
科普知識
數據分類:
PLC可編程控制器

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

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

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


  • 摘要:今天,正運動技術為大家分享一下VPLC系列機器視覺運動控制一體機快速入門(四)——BLOB有無檢測。


image.png


今天,正運動技術為大家分享一下VPLC系列機器視覺運動控制一體機快速入門(四)——BLOB有無檢測。


上期課程,我們講述了機器視覺方案中常用到的基于形狀匹配的視覺定位功能,通過上期課程我們掌握了使用ZDevelop軟件實現形狀匹配功能的方法。


本期課程我們和大家一起分享機器視覺另一個檢測功能---使用BLOB檢測產品有無。


image.png


什么是BLOB


BLOB又名斑點,是指在二值化圖像中暗背景上的一塊連通的亮區域或亮背景上一塊連通的暗區域。


image.png


什么是BLOB檢測


BLOB檢測是使用形態學方法(如二值化、膨脹、腐蝕等)將灰度圖像轉換成二值化圖像,轉換同時將檢測特征處理成BLOB斑點并將干擾因素處理成圖像背景,就可以準確地對檢測特征進行處理。


image.png


BLOB檢測特點是什么


1.依賴形態學處理

需要將檢測圖像轉換成二值化圖像,并使用形態學處理圖像突出檢測特征。

2.不關心形狀特征

只要是連通的區域即可檢測,不限制產品的形狀。

3.適合高對比度產品

BLOB檢測要求檢測特征和背景要有較好的對比度,否則無法將特征和背景進行區分。

4.執行速度快

轉化成二值化圖像后搜索BLOB斑點不需要消耗太多時間。


什么是形態學處理


形態學處理是指對圖像的局部像素進行處理,用于從圖像中提取檢測過程中關心的局部特征細節。常用的形態學處理方法有二值化、膨脹、腐蝕、填充孔洞等。


二值化


將8位灰度圖像(灰度值0~255)轉換成非0即1的二值化圖像(純黑和純白組成的圖像)。


image.png


填充孔洞


在二值化圖像中,將某些小面積的黑色或白色的斑點區域進行填充,可過濾噪點。


image.png


膨脹


將二值化圖像中的白色區域擴大,黑色區域縮小,去除黑色小斑點干擾。


image.png


腐蝕


將二值化圖像中的黑色區域擴大,白色區域縮小,可去除白色小斑點干擾。


image.png


image.png


image.png


// 實例演示 //


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


image.png


設計HMI界面。


image.png


在global_variable.bas文件中定義全局變量,定義完成后運行Hmi.hmi文件。


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

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

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


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

''table 31-35,旋轉矩ROI參數,cx、cy、width、height、angle,控件坐標系

''table 41-45,旋轉矩形控件坐標轉換后對應的圖像坐標,圖像坐標系


''table 51-56,圓環ROI參數,cx、cy、圓環中線半徑r、圓環半寬ann_R、起始角度stAngle、角度范圍entAngle,控件坐標系

''table 61-66,圓環控件坐標轉換后對應的圖像坐標,圖像坐標系


'主任務狀態

'0 - 未初始化

'1 - 停止

'2 - 運行中

'3 - 正在停止

GLOBAL DIM main_task_state

main_task_state = 1


'采集開關

'0 - 停止采集

'1 - 請求采集

GLOBAL DIM grab_switch

grab_switch = 0


'相機個數

GLOBAL cam_num

cam_num = 0


'相機種類,"zmotion;mvision;basler;mindvision;huaray"

GLOBAL DIM CAMERA_TYPE(16)

CAMERA_TYPE = "zmotion"


' 定義主任務id - 10

GLOBAL DIM main_task_id

main_task_id = 10


'定義連續采集任務id - 9

GLOBAL DIM grab_task_id

grab_task_id = 9


'定義全局圖像變量

GLOBAL ZVOBJECT grabImg '采集圖像

GLOBAL ZVOBJECT binImg  '二值化圖像

GLOBAL ZVOBJECT disImg  '顯示圖像


'錯誤消息

GLOBAL DIM error_msg(256)


'定義常用顏色變量

GLOBAL C_RED, C_GREEN, C_BLUE, C_YELLOW

C_RED   = RGB(255,  0,  0)

C_GREEN = RGB(  0,255,  0)

C_BLUE  = RGB(  0,  0,255)

C_YELLOW= RGB(255,255,  0)


GLOBAL DIM d_roi_arc_flag   '定義ROI類型標志:0-矩形,1-圓環

GLOBAL DIM d_rlt_area       '定義BLOB面積結果

GLOBAL DIM d_rlt_state      '定義狀態結果


'旋轉矩形ROI參數:cx、cy、width、height、angle

GLOBAL DIM d_roi_rect2(5)    'd開頭表示數據結構


'圓弧ROI參數:cx、cy、圓環中線半徑r、圓環半寬ann_R、起始角度stAngle、角度范圍entAngle

GLOBAL DIM d_roi_arc(6)      'd開頭表示數據結構


'檢測參數:閾值模式(自動閾值或手動閾值)、低閾值、高閾值、極性(黑或白)、最小面積、最大面積、反向(即結果取反,成功變成失敗、失敗變成成功)

GLOBAL DIM d_detect_param(7)   'd開頭表示數據結構


'開/閉運算參數

GLOBal DIM d_deal_value(2)


'檢測的結果,依次為狀態結果、像素面積

GLOBAL DIM d_detect_rst(2)


'顯示打印的字符

GLOBAL ShowString(64)


'運行HMI文件

RUN "Hmi.hmi",1



圖片


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


end


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

  

  d_roi_arc_flag = 0 '默認為矩形

  d_rlt_area = 0

  d_rlt_state = 0

  d_deal_value(0)=1

  d_deal_value(1)=1

  

  '初始化roi參數 

  d_roi_rect2(0) = 320.0     'roi中心x

  d_roi_rect2(1) = 240.0     'roi中心y

  d_roi_rect2(2) = 160.0     'roi寬

  d_roi_rect2(3) = 120.0     'roi高

  d_roi_rect2(4) = 0.0       'roi角度

  TABLE(31) = d_roi_rect2(0)

  TABLE(32) = d_roi_rect2(1)

  TABLE(33) = d_roi_rect2(2)

  TABLE(34) = d_roi_rect2(3)

  TABLE(35) = d_roi_rect2(4)

  

  d_roi_arc(0) = 320.0     'roi中心x

  d_roi_arc(1) = 240.0     'roi中心y

  d_roi_arc(2) = 60.0      '圓環中心線半徑

  d_roi_arc(3) = 20.0      '圓環半寬

  d_roi_arc(4) = 0.0       '起始角度

  d_roi_arc(5) = 360.0     '終止角度

  TABLE(51) = d_roi_arc(0)

  TABLE(52) = d_roi_arc(1)

  TABLE(53) = d_roi_arc(2)

  TABLE(54) = d_roi_arc(3)

  TABLE(55) = d_roi_arc(4)

  TABLE(56) = d_roi_arc(5)

  

  '初始化檢測參數:閾值模式(自動閾值 = 1 或 手動閾值 = 0)、低閾值、高閾值、極性(黑或白)、最大、最小、反向(即結果取反,成功變成失敗、失敗變成成功)

  d_detect_param(0) = 0      '手動閾值

  d_detect_param(1) = 128    '低閾值

  d_detect_param(2) = 255    '高閾值

  d_detect_param(3) = 1      '極性白,即檢測白色像素面積

  d_detect_param(4) = 60000  '最小面積,像素個數

  d_detect_param(5) = 90000  '最大面積

  d_detect_param(6) = 0      '結果不反向

  

END SUB


image.png


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


image.png


在main.bas文件中添加HMI界面初始化函數并在Hmi系統設置中關聯初始化函數。


'HMI界面初始化函數

GLOBAL SUB hmi_init()

  grab_switch = 0 

  main_task_state = 1

  ZV_RESETCLIPSIZE(1280, 1024) '初始化時依據圖像分辨率設置區域的裁剪尺寸,此處圖像分辨率為1280x1024

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


  init_detect_param()                '初始化測量參數

  

  ZV_SETSYSDBL("CamGetTimeout", 1000) '設置采集超時

  ZV_LATCHCLEAR(0)

  ZV_LATCH(grabImg, 0)

  

END SUB

image.png


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


相機操作相關按鈕

具體實現函數前期課程:


VPLC系列機器視覺運動控制一體機快速入門(三)基于形狀匹配的視覺定位

VPLC系列機器視覺運動控制一體機快速入門(二)相機的基本使用

VPLC系列機器視覺運動控制一體機快速入門(一)軟硬件介紹及計數實例

已經有操作演示,此處不做贅述。


在draw.bas文件中添加檢測ROI更新繪制函數,并在自定義元件屬性窗口中關聯刷新函數和繪制函數。


end 


'和繪制(即選擇ROI)有關的界面的刷新繪制函數放在這個bas文件里  


  DIM is_redraw

  is_redraw = 0

  

  DIM hit_pos


'根據鼠標操作更新ROI位置區域函數

GLOBAL SUB update_roi()  

  if d_roi_arc_flag = 0 then  

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

      hit_pos = ZV_HMIADJRECT2(table(21), table(22), 31, -1) '只有按下時可以改變擊中位置

      is_redraw = 1 

    endif


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

      ZV_HMIADJRECT2(table(21), table(22), 31, hit_pos)

      is_redraw = 1

    endif

  

    if (MOUSE_state(21)) then

      ZV_HMIADJRECT2(table(21), table(22), 31, hit_pos)

      is_redraw = 1

    endif

  

    if (1 = is_redraw) then

      is_redraw = 0

      ZV_POSTOIMG(0, 1, 31, 41)

      d_roi_rect2(0) = TABLE(41)

      d_roi_rect2(1) = TABLE(42)

      d_roi_rect2(2) = ZV_LENTOIMG(0, TABLE(33))

      d_roi_rect2(3) = ZV_LENTOIMG(0, TABLE(34))

      d_roi_rect2(4) = TABLE(35)

      SET_REDRAW

    endif

  else

    is_redraw = 0

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

      hit_pos = ZV_HMIADJARC(table(21), table(22), 51, -1)  '只有按下時可以改變擊中位置

      is_redraw = 1

    endif


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

      ZV_HMIADJARC(table(21), table(22), 51, hit_pos)  

      is_redraw = 1 

    endif

  

    if (MOUSE_state(21)) then  

      ZV_HMIADJARC(table(21), table(22), 51, hit_pos)  

      is_redraw = 1  

    endif

  

    if (1 = is_redraw) then  

      is_redraw = 0  

    

      '控件坐標轉圖像坐標  

      ZV_POSTOIMG(0, 1, 51, 61)

      TABLE(63) = ZV_LENTOIMG(0, TABLE(53))

      TABLE(64) = ZV_LENTOIMG(0, TABLE(54))

      TABLE(65, TABLE(55), TABLE(56))

    

      d_roi_arc(0) = TABLE(61)

      d_roi_arc(1) = TABLE(62)

      d_roi_arc(2) = TABLE(63)

      d_roi_arc(3) = TABLE(64)

      d_roi_arc(4) = TABLE(65)

      d_roi_arc(5) = TABLE(66)

      SET_REDRAW

      

    endif

  end if

  

END SUB


'ROI區域更新后實時繪制ROI區域

GLOBAL SUB draw_roi() 

  if d_roi_arc_flag = 0 then 

    SET_COLOR(C_BLUE)

    ZV_HMIRECT2(31, 300)  '將旋轉矩形roi分解為HMI支持的繪圖圖元并添加控制參數,便于HMI繪圖顯示

    DRAWLINE(TABLE(300), TABLE(301), TABLE(302), TABLE(303)) '外矩形

    DRAWLINE(TABLE(302), TABLE(303), TABLE(304), TABLE(305)) 

    DRAWLINE(TABLE(304), TABLE(305), TABLE(306), TABLE(307)) 

    DRAWLINE(TABLE(306), TABLE(307), TABLE(300), TABLE(301)) 

  

  else  

    SET_COLOR(C_BLUE)

    TABLE(57) = 1       '子區域的個數

    TABLE(58) = 5       '子區域寬度

    ZV_HMIARC(51, 400)  '繪制圓環


    '繪制圓弧

    DRAWARC(TABLE(400), TABLE(401), TABLE(402), TABLE(404), TABLE(405)) '內半徑 

    DRAWARC(TABLE(400), TABLE(401), TABLE(403), TABLE(404), TABLE(405)) '外半徑

    

    '繪制邊界線 

    DIM idx

    for idx = 0 to TABLE(406)-1

      DRAWLINE(TABLE(407+idx*4), TABLE(408+idx*4), TABLE(409+idx*4), TABLE(410+idx*4))

    next

  endif

  

END SUB


image.png


在main.bas文件中添加HMI界面按下【測試】按鈕時響應的函數并關聯動作函數名。

image.png


'HMI界面按下測試按鈕時響應的函數

GLOBAL SUB btn_test()

  ZVOBJECT regionWhite, regionMask, regionBlack,re_connecte

  

  '生成ROI區域

  if d_roi_arc_flag = 0 then

    ZV_REGENRECT2(regionMask, d_roi_rect2(0), d_roi_rect2(1), d_roi_rect2(2), d_roi_rect2(3), d_roi_rect2(4))

  else

    ZV_REGENANNULAR(regionMask, d_roi_arc(0), d_roi_arc(1), d_roi_arc(2) - d_roi_arc(3), d_roi_arc(2) + d_roi_arc(3))

  endif


  '二值化處理

  if d_detect_param(0) = 0 then    '手動閾值處理

  

    ZV_RETHRESH(grabImg, regionMask, regionWhite, d_detect_param(1), d_detect_param(2))

    ZV_REOPENING(regionWhite,regionWhite,d_deal_value(0),d_deal_value(0))

    ZV_RECLOSING(regionWhite,regionWhite,d_deal_value(1),d_deal_value(1))

  

  else

  

    Dim autoThresh                '自動閾值處理

    ZV_REAUTOTHRESH(grabImg, regionMask, regionWhite, 500)

    ZV_REOPENING(regionWhite,regionWhite,d_deal_value(0),d_deal_value(0))

    ZV_RECLOSING(regionWhite,regionWhite,d_deal_value(1),d_deal_value(1))

    autoThresh = TABLE(500)

    '? "autoThresh = " autoThresh

    

  endif

  

  '計算BLOB面積

  if d_detect_param(3) = 1 then '極性為白

  

    ZV_REAREA(regionWhite, 500)               '計算regionWhite亮區域的面積

    d_rlt_area = TABLE(500)                   '將獲取的像素面積賦值給d_rlt_area變量

    ZV_REConNECT(regionWhite,re_connecte)     '計算區域的連通區域

    zv_refilter(re_connecte,0,60000,90000,0)  '對區域列表中的區域進行過濾,保留面積在 60000 到 90000 的區域,面積不在此范圍的區域將被過濾掉

    ZV_LISTCOUNT(re_connecte,100)             '獲取列表中的連通區域的數量

    ?"產品個數"TABLE(100)


  else                          '極性為黑

  

    ZV_REDIFF (regionMask, regionWhite, regionBlack)

    ZV_REAREA(regionBlack, 500)

    d_rlt_area = TABLE(500)

  

    ZV_REConNECT(regionBlack,re_connecte)     '計算區域的連通區域

    zv_refilter(re_connecte,0,60000,90000,0)  '對區域列表中的區域進行過濾,保留面積在 60000 到 90000 的區域,面積不在此范圍的區域將被過濾掉

    ZV_LISTCOUNT(re_connecte,100)             '獲取列表中的連通區域的數量

    ?"產品個數"TABLE(100)

    

  endif


  '對結果進行判斷

  if d_rlt_area > d_detect_param(4) and d_rlt_area < d_detect_param(5) then   '面積結果在設定的面積上下限范圍內時

    d_rlt_state = 1

  else

    d_rlt_state = 0

  endif

  

  '是否反向的判斷

  if d_detect_param(6) then 

    d_rlt_state = 1 - d_rlt_state

  endif

  

  '繪制效果圖

  Dim width, height

  ZV_IMGINFO (grabImg, 500)

  width = TABLE(500)

  height = TABLE(501)

  

  ZV_GRAYTORGB(grabImg,disImg)

  ShowString=TOSTR(TABLE(100),1,0)    '將BLOB的數量轉換成字符串變量

  

  ZV_TEXT(disImg,"零件統計個數:"ShowString,10,80,80,ZV_COLOR(0,0,0))  '顯示結果文本


  ZV_REGION(disImg, regionMask, 0, ZV_COLOR(0,0,0))         '在disImg中繪制黑色的regionMask區域

  ZV_REGION(disImg, regionWhite, 0, ZV_COLOR(255,255,255))  '在disImg中繪制白色的regionWhite區域

  ZV_LATCH(disImg, 0) 

  

end sub

image.png


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


image.png


'HMI界面按下運行按鈕時響應的函數

GLOBAL SUB btn_run()

    if(2 = main_task_state) then 

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

     return 

  endif

  

  if (1 = main_task_state) then

    if (0 = PROC_STATUS(main_task_id)) then

      main_task_state = 2

      RUNTASK  main_task_id, main_task

    endif

  endif

end sub


main_task:

  while(1)

    if (3 = main_task_state) then

      main_task_state = 1

      exit while

    endif

    

    '執行采集和檢測函數

    CAM_SETPARAM("TriggerSoftware", 0)

      CAM_GET(grabImg, 0)

    btn_test()

    

  wend

END

image.png


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


image.png

'HMI界面按下停止按鈕時響應的函數

GLOBAL SUB btn_stop()

  if (2 = main_task_state) then 

     main_task_state = 3

  endif

  

end sub

image.png


仿真演示效果

image.png


本次,正運動技術VPLC系列機器視覺運動控制一體機快速入門(四)——BLOB有無檢測就分享到這里,更多精彩內容請關注“正運動小助手”公眾號。


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


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

上一篇: 運動控制器RTEX總線使

推薦產品

更多