美女网站一区二区_在线观看日韩毛片_成人在线视频首页_欧美精品一区二区三区久久久_国产精品亚洲一区二区三区在线_日本免费新一区视频_日本美女一区二区三区_精品亚洲成a人_久久不见久久见免费视频1_91首页免费视频_欧美一区二区在线看_91精品91久久久中77777_天堂蜜桃一区二区三区_av在线一区二区_欧美不卡一区二区_欧美影视一区二区三区

產(chǎn)品分類

當(dāng)前位置: 首頁(yè) > 工業(yè)電氣產(chǎn)品 > 端子與連接器 > 線路板連接器 > FFC連接器

類型分類:
科普知識(shí)
數(shù)據(jù)分類:
FFC連接器

機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)應(yīng)用例程(三) 基于BLOB分析的多圓定位

發(fā)布日期:2022-04-25 點(diǎn)擊率:145

  • 關(guān)鍵詞:正運(yùn)動(dòng)技術(shù),機(jī)器視覺(jué),運(yùn)動(dòng)控制一體機(jī)


  • 摘要:我們?cè)凇禫PLC系列機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)快速入門(三)》的推文中,講述了基于形狀匹配的視覺(jué)定位功能,而BLOB斑點(diǎn)分析也可以實(shí)現(xiàn)定位功能。


image.png


我們?cè)凇禫PLC系列機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)快速入門(三)》的推文中,講述了基于形狀匹配的視覺(jué)定位功能,而BLOB斑點(diǎn)分析也可以實(shí)現(xiàn)定位功能。


本期課程我們將在BLOB斑點(diǎn)分析定位的基礎(chǔ)上進(jìn)行檢測(cè)圓形,輸出圓心的坐標(biāo)數(shù)據(jù)。


一檢測(cè)原理


(一)BLOB斑點(diǎn)定位


BLOB斑點(diǎn)分析功能可以輸出BLOB區(qū)域的重心位置XY,BLOB斑點(diǎn)區(qū)域還可以擬合成特定形狀如外接矩形,輸出矩形的角度,從而實(shí)現(xiàn)定位的功能。


(二)BLOB分析的圓形檢測(cè)+示意圖


圓形測(cè)量器不具有定位功能,因此當(dāng)檢測(cè)目標(biāo)在視野的位置是隨機(jī)時(shí),我們需要配合定位功能將測(cè)量器跟隨目標(biāo)移動(dòng)。本節(jié)程序示例將檢測(cè)到的BLOB重心XY數(shù)據(jù)作為圓形測(cè)量器的中心XY值,即可實(shí)現(xiàn)位置跟隨功能。


image.png


二軟件演示


(一)檢測(cè)要求


使用ZDevelop軟件的ZBASIC編程語(yǔ)言編寫程序,用于檢測(cè)以下路徑中圖片的圓環(huán)零件的圓心位置XY以及半徑。 


使用到的視覺(jué)功能:BLOB斑點(diǎn)分析+檢測(cè)圓形+九點(diǎn)標(biāo)定。


image.png


(二)實(shí)例演示


1.打開(kāi)ZDevelop軟件:新建項(xiàng)目→新建HMI文件→新建main.bas文件,用于編寫界面響應(yīng)函數(shù)→新建global_variable.bas文件用于定義全局變量并開(kāi)啟HMI自動(dòng)運(yùn)行任務(wù)→新建detectParam.bas文件,用于初始化測(cè)量參數(shù)→新建camera.bas文件用于實(shí)現(xiàn)相機(jī)采集功能→文件添加到項(xiàng)目。


image.png


2.設(shè)計(jì)HMI界面。


image.png


3.在global_variable.bas文件中添加全局變量。


'''''全局變量大部分使用數(shù)組結(jié)構(gòu)'''''

''注:basic編程中很多函數(shù)會(huì)以TABLE(系統(tǒng)的數(shù)據(jù)結(jié)構(gòu))做為參數(shù)

''table        說(shuō)明                 table            說(shuō)明

''0  '    自動(dòng)二值化閾值            11~12   鼠標(biāo)操作時(shí)獲取的坐標(biāo)

''2       亮區(qū)域的面積            20~24   圖像信息

''4       暗區(qū)域的面積            6       連通區(qū)域的數(shù)量   

''40~42  小圓斑點(diǎn)的面積和位置X,Y數(shù)據(jù)  81~98  標(biāo)定圖像坐標(biāo)xy       

''46~48  小圓圓心X,Y和半徑          131~148  標(biāo)定世界坐標(biāo)xy

''39     提取mark點(diǎn)成功標(biāo)志          56~57  圓點(diǎn)矩陣行列數(shù)

''49~50  圓上的點(diǎn)坐標(biāo)

'主任務(wù)狀態(tài)

'0 - 未初始化

'1 - 停止

'2 - 運(yùn)行中

'3 - 正在停止

GLOBAL DIM main_task_state

main_task_state = 1


'采集開(kāi)關(guān)

'0 - 停止采集

'1 - 請(qǐng)求采集

GLOBAL DIM grab_switch

grab_switch = 0


'相機(jī)個(gè)數(shù)

GLOBAL cam_num

cam_num = 0


'相機(jī)種類,"zmotion;mvision;basler;mindvision;huaray"

GLOBAL DIM CAMERA_TYPE(16)

CAMERA_TYPE = "mvision"


' 定義主任務(wù)id - 10

GLOBAL DIM main_task_id

main_task_id = 10


'定義連續(xù)采集任務(wù)id - 9

GLOBAL DIM grab_task_id

grab_task_id = 9


'定義全局圖像變量

GLOBAL ZVOBJECT grabImg '采集圖像

GLOBAL ZVOBJECT binImg '二值化圖像

GLOBAL ZVOBJECT disImg '顯示圖像


'定義常用顏色變量

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)


'檢測(cè)參數(shù):閾值模式(自動(dòng)閾值或手動(dòng)閾值)、低閾值、高閾值、最小面積、最大面積

GLOBAL DIM d_detect_param(5) 'd開(kāi)頭表示數(shù)據(jù)結(jié)構(gòu)


'開(kāi)/閉運(yùn)算參數(shù)

GLOBal DIM d_deal_value(2)


'檢測(cè)消耗時(shí)間

GLOBal DIM d_detect_time


'小圓的位置x/y結(jié)果

GLOBal DIM d_circle_rst(18)


'顯示打印的字符

GLOBAL ShowString(64)


'***********定義坐標(biāo)標(biāo)定相關(guān)變量*********************

'是否標(biāo)定

GLOBAL DIM is_ca_success


'定義標(biāo)定成功標(biāo)志,0-標(biāo)定未成功,1-標(biāo)定成功

GLOBAL DIM d_calib_success

d_calib_success = 0


'定義標(biāo)定系數(shù)即矩陣轉(zhuǎn)換系數(shù)

GLOBAL ZVOBJECT ca_param


'定義標(biāo)定參數(shù)數(shù)組,依次為:標(biāo)定類型、對(duì)比度、極性、最小面積、最大面積、世界坐標(biāo)點(diǎn)間距

GLOBAL DIM d_ca_param(6) 'd開(kāi)頭表示數(shù)據(jù)結(jié)構(gòu)


'定義是否使用標(biāo)定功能

GLOBAL DIM d_use_calib

d_use_calib=0


'定義標(biāo)定誤差,依次為最小誤差、最大誤差、平均誤差

GLOBAL DIM ca_min_err,ca_max_err,ca_avg_err

ca_min_err = 0

ca_max_err = 0

ca_avg_err = 0


'***********定義讀取本地文件功能相關(guān)變量**************

''注意,該功能只在使用仿真器時(shí)有效

'定義是否使用本地圖片標(biāo)志

GLOBAL DIM d_use_imgfile


'定義本地圖片索引

GLOBAL DIM d_index


'定義讀取圖片的路徑

GLOBAL DIM File_Name(100)   


'***********結(jié)束定義讀取本地文件功能相關(guān)變量**********


'運(yùn)行HMI文件

RUN "Hmi.hmi",1

4.關(guān)聯(lián)HMI界面控件變量。


image.png


5.在detectParam.bas文件中初始化測(cè)量參數(shù)。


end


GLOBAL SUB init_detect_param()    '初始化測(cè)量參數(shù)

  

    d_deal_value(0)=1          '初始化開(kāi)/閉運(yùn)算參數(shù)

    d_deal_value(1)=1

    

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

    d_detect_param(0) = 0      '手動(dòng)閾值

    d_detect_param(1) = 140    '低閾值

    d_detect_param(2) = 255     '高閾值

    d_detect_param(3) = 11000    '最小面積即像素個(gè)數(shù)

    d_detect_param(4) = 12000    '最大面積

  

    d_use_imgfile = 1           '默認(rèn)使用本地圖片

    d_index      = 0

    

    TABLE(6)=0   '將小圓數(shù)量初始化為0

    for i=0 to 17

        d_circle_rst(i)=0

    next

    '初始化坐標(biāo)標(biāo)定相關(guān)的變量

    d_ca_param(0) = 0    '標(biāo)定類型

    d_ca_param(1) = 120    '對(duì)比度

    d_ca_param(2) = 0    '極性

    d_ca_param(3) = 80    '最小面積

    d_ca_param(4) = 20000  '最大面積

    d_ca_param(5) = 9       '世界坐標(biāo)點(diǎn)間距

    ca_min_err = 0      '最小誤差

    ca_max_err = 0      '最大誤差

    ca_avg_err = 0      '平均誤差

    

    for i=0 to 17           '初始化圓點(diǎn)矩陣像素坐標(biāo)    

        TABLE(81+i)=0

    next

    

    for i=0 to 17           '初始化圓點(diǎn)矩陣世界坐標(biāo)    

        TABLE(131+i)=0

    next

    TABLE(39)=0             '提取mark點(diǎn)狀態(tài)默認(rèn)為失敗 

    

END SUB

6.在main.bas文件中添加界面初始化函數(shù),并在hmi系統(tǒng)設(shè)置中關(guān)聯(lián)初始化函數(shù)名。


end


'注:

'凡是要使用Region有關(guān)的算子在系統(tǒng)初始化時(shí)都要調(diào)用ZV_RESETCLIPSIZE(width, height)這個(gè)算子設(shè)置下圖像尺寸,以滿足相機(jī)分辨率,因?yàn)槟J(rèn)的是640*480尺寸


'HMI界面初始化函數(shù)

GLOBAL SUB hmi_init()

    grab_switch = 0              '停止采集

    main_task_state = 1          '主任務(wù)停止運(yùn)行

    ZV_RESETCLIPSIZE(1280, 960) '依據(jù)圖像分辨率設(shè)置區(qū)域的裁剪尺寸,此處圖像分辨率為1280x960

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

    init_detect_param()        '初始化測(cè)量參數(shù)

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

    ZV_SETSYSINT("LineWidth",6)

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

    

END SUB

image.png


7.在camera.bas文件中添加HMI運(yùn)行界面中采集相關(guān)按鈕響應(yīng)的函數(shù)并關(guān)聯(lián)動(dòng)作函數(shù)。


圖片


相機(jī)操作相關(guān)按鈕


end


'主界面按下掃描相機(jī)按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB cam_scan_all()


    if(d_use_imgfile=1)then 

        ?"請(qǐng)先按下使用本地圖片按鈕關(guān)閉該功能"

    return 

    endif 

  

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

    ZV_SETSYSSTR("DataDir","")

      

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

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

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

         ? "未找到相機(jī)" 

        

    return                       '退出子函數(shù),不往下執(zhí)行

    endif

    ?"cam_num = " cam_num            '如果掃描到相機(jī),打印相機(jī)數(shù)量

  

    CAM_SEL(0)                       '選擇掃描到的第一個(gè)相機(jī)進(jìn)行操作

    CAM_SETEXPOSURE(5000)           '設(shè)置相機(jī)曝光時(shí)間為5000us      

    CAM_SETMODE(0)                   '設(shè)置軟件觸發(fā)模式

    CAM_START(0)                     '開(kāi)啟相機(jī)  

  

END SUB


'主界面按下單次采集按鈕執(zhí)行的函數(shù)

GLOBAL SUB btn_grab()


    ''如果d_use_imgfile=1時(shí)使用讀取本地圖片功能,該功能只在使用仿真器時(shí)有效,使用控制器時(shí)請(qǐng)將此部分代碼注釋掉

    if (d_use_imgfile=1) then 

        if(d_index=3) then 

             d_index=0

        endif

        File_Name="圓定位"+TOSTR(d_index,1,0)+".bmp"   '.../flash/圓定位/目錄下的圖片所在的路徑名稱

        ZV_IMGREAD(grabImg,File_Name,0)

        ZV_LATCH(grabImg, 0) 

        d_index=d_index+1

    return   

    endif

    ''讀取本地圖片功能結(jié)束

  

    if cam_num = 0   then 

        ?"請(qǐng)先掃描相機(jī)!"

    return 

    endif

  

    CAM_SETPARAM("TriggerSoftware", 0)  '發(fā)送觸發(fā)指令

    CAM_GET(grabImg, 0)                 '獲取一幀圖像存放到grabImg變量中

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

    

END SUB


'主界面按下連續(xù)采集按鈕響應(yīng)的函數(shù)

GLOBAL SUB btn_cgrab()

    if grab_switch =1 then                 '如果已經(jīng)處于連續(xù)執(zhí)行狀態(tài),打印提示信息并退出函數(shù)

       ?"正在連續(xù)運(yùn)行中,請(qǐng)勿重復(fù)操作!"

     return 

    endif

  

    if( d_use_imgfile =0) then 

        if cam_num = 0   then                  '如果相機(jī)數(shù)量=0,打印提示信息并退出函數(shù)        

             ?"請(qǐng)先掃描相機(jī)!"

        return 

        endif

    endif

  

    grab_switch = 1                         '采集任務(wù)開(kāi)關(guān)置1

       if (1 = grab_switch) then

            if (0 = PROC_STATUS(grab_task_id)) then

                 RUNTASK  grab_task_id, grab_task    '開(kāi)啟連續(xù)采集任務(wù)

            endif

       endif

  

END SUB


'采集任務(wù)實(shí)現(xiàn)函數(shù)

grab_task:

    while(1)

        if (0 = grab_switch) then        '如果采集任務(wù)開(kāi)關(guān)=0即停止采集按鈕按下時(shí)

            exit while                   '退出循環(huán)

        endif

          

        '重復(fù)執(zhí)行以下操作

        btn_grab()

    wend

END


'主界面按下停止采集按鈕響應(yīng)的函數(shù)

GLOBAL SUB btn_stopCgrab()

    if grab_switch =0 then               '如果已經(jīng)處于停止采集狀態(tài),打印提示信息并退出函數(shù)

       ?"未開(kāi)啟連續(xù)采集!"

    return 

    endif

  

    grab_switch = 0                       '將采集任務(wù)開(kāi)關(guān)置0

    

END SUB

8.點(diǎn)擊“元件”→“新建窗口”,新建標(biāo)定界面窗口,并將《VPLC系列機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)快速入門(六)》中的標(biāo)定程序的界面拷貝到新建的窗口界面。


image.png


9.在main.bas文件中添加運(yùn)行界面按下【標(biāo)定】按鈕時(shí)的響應(yīng)函數(shù),以及標(biāo)定窗口界面按下【提取mark點(diǎn)】按鈕、【標(biāo)定】按鈕以及【返回】按鈕時(shí)響應(yīng)的函數(shù),可參考《VPLC系列機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)快速入門(六)》中的標(biāo)定程序。


'點(diǎn)擊運(yùn)行界面按下標(biāo)定按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_calib()

    '設(shè)置坐標(biāo)標(biāo)定窗口鎖存通道0的鎖存大小

    ZV_LATCHSETSIZE(0, HMI_ConTROLSIZEX(11, 91), HMI_ConTROLSIZEY(11, 91)) 

    if (d_use_imgfile=1) then   '如果使用本地圖片功能

    ZV_IMGREAD(grabImg,"圓定位calib.bmp",0)  '加載標(biāo)定圖片

    endif

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

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

    HMI_SHOWWINDOW(11)         '彈出窗口號(hào)為11的坐標(biāo)標(biāo)定窗口界面

   

END SUB


'坐標(biāo)標(biāo)定界面按下提取mark點(diǎn)按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_ca_extract()

    for i=0 to 17           '初始化圓點(diǎn)矩陣像素坐標(biāo)    

       TABLE(81+i)=0

    next

  

    for i=0 to 17           '初始化圓點(diǎn)矩陣世界坐標(biāo)    

       TABLE(131+i)=0

    next

    TABLE(39)=0             '提取mark點(diǎn)狀態(tài)默認(rèn)為失敗

    ZVOBJECT inppts, ppts, wpts

    

    '根據(jù)提取像素參數(shù)提取像素坐標(biāo),存放到inppts矩陣中

    ZV_CALGETSCAPTS(grabImg, inppts, d_ca_param(1), d_ca_param(2), d_ca_param(3), d_ca_param(4))

    '獲取矩陣inppts中的數(shù)據(jù)信息,存放到table(56)中

    ZV_MATINFO (inppts, 56)

    

    DIM row,col

    row = TABLE(56)   '矩陣行數(shù)賦值給row變量

    col = TABLE(57)   '矩陣列數(shù)賦值給col變量

    if(row * col = 18) then '如果獲取到9個(gè)圓點(diǎn)的圓心位置坐標(biāo)x,y   

        TABLE(39) = 1 '窗口界面提示提取mark點(diǎn)成功

    else

        TABLE(39) = 0 '窗口界面提示提取mark點(diǎn)失敗

    return         '返回子函數(shù),不往下執(zhí)行

    endif

    

    '根據(jù)mrak點(diǎn)間距和像素坐標(biāo)計(jì)算世界坐標(biāo),存放到wpts矩陣

    ZV_CALGETPTSMAP(inppts,ppts,wpts,d_ca_param(5))

    '獲取矩陣ppts中的數(shù)據(jù)信息,存放到table(56)中

    ZV_MATINFO (ppts, 56)

    

    row = TABLE(56)  '矩陣行數(shù)賦值給row變量

    col = TABLE(57)  '矩陣列數(shù)賦值給col變量

    if(row * col = 18) then'如果獲取到9個(gè)圓點(diǎn)的圓心位置坐標(biāo)x,y 

        TABLE(39) = 1 '窗口界面提示提取mark點(diǎn)成功

    else

      TABLE(39) = 0 '窗口界面提示提取mark點(diǎn)失敗

    return         '返回子函數(shù),不往下執(zhí)行

    endif

     

    '像素坐標(biāo)和世界坐標(biāo)放入table中

    DIM i

    FOR i=0 TO row-1

        ZV_MATGETROW (ppts, i, col, 81 + i*col)'將像素坐標(biāo)存放到table81~table98中

        ZV_MATGETROW (wpts, i, col, 131 + i*col)'將世界坐標(biāo)存放到table131~table148中

    NEXT

    

    '將灰度圖轉(zhuǎn)成RGB圖像,作為結(jié)果圖像

    ZVOBJECT color

    ZV_GRAYTORGB(grabImg, color)

    

    '繪制mark點(diǎn)的十字架

    DIM j, pixNum 

    pixNum = 0

    FOR i=0 TO 2

        FOR j=0 TO 2

            '繪制mark標(biāo)記點(diǎn)

          ZV_MARKER(color, TABLE(81 + 2 * pixNum), TABLE(81 + 2 * pixNum + 1), 0, 40, C_GREEN)

          pixNum = pixNum + 1

        NEXT

    NEXT

    

    '用文本繪制mark點(diǎn)的序號(hào),顯示在圖像界面中

    FOR i=0 TO 8

        ZV_TEXT (color, TOSTR(i,1,0), TABLE(81+2*i)-20, TABLE(81+2*i +1)-40, 80, C_RED)

    NEXT

  

    ZV_LATCH(color, 0)'顯示結(jié)果圖像

  

END SUB


'坐標(biāo)標(biāo)定界面按下標(biāo)定按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_ca_calib()

    ZV_IMGINFO(grabImg,0)  '獲取采集圖像信息

    '根據(jù)像素坐標(biāo)數(shù)據(jù)組和世界坐標(biāo)數(shù)據(jù)組執(zhí)行標(biāo)定,獲得標(biāo)定系數(shù)ca_param

    ZV_CALCAM(ppts,wpts,ca_param,TABLE(0),TABLE(1),d_ca_param(0))

    is_ca_success=1 '標(biāo)定成功標(biāo)志置1

    

    ZV_CALERROR(ca_param, ppts, wpts, 0)'計(jì)算標(biāo)定誤差,并將結(jié)果存放在起始地址為0的數(shù)組中

    ca_min_err = TABLE(1) '將誤差結(jié)果賦值給變量,用于在界面中實(shí)時(shí)顯示誤差結(jié)果

    ca_max_err = TABLE(2)

    ca_avg_err = TABLE(0)

  

END SUB


'坐標(biāo)標(biāo)定界面按下返回按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_ca_param_rtn()

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

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

    btn_grab()

    HMI_CLOSEWINDOW(11)   '關(guān)閉窗口號(hào)為13的坐標(biāo)標(biāo)定窗口界面

  

END SUB

10.在main.bas文件中添加HMI運(yùn)行界面按下測(cè)試按鈕響應(yīng)的函數(shù),并關(guān)聯(lián)動(dòng)作函數(shù)名。


'HMI界面按下測(cè)試按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_test()

    TABLE(6)=0   '檢測(cè)前先將結(jié)果數(shù)據(jù)清0

    d_detect_time=0

    for i=0 to 17

        d_circle_rst(i)=0

    next

  

    TICKS=0

    '定義變量,依次為白色像素連通區(qū)域,掩模區(qū)域,黑色像素連通區(qū)域,連通區(qū)域結(jié)果列表,小圓斑點(diǎn)區(qū)域,圓測(cè)量器,中間結(jié)果變量

    ZVOBJECT regionWhite, regionMask, regionBlack,re_connecte,circle_connect,mr,tmp

    

     '生成全圖像區(qū)域

    ZV_REGENFULLIMG(grabImg,regionMask)

  

    '二值化處理

    if d_detect_param(0) = 0 then    '如果選擇手動(dòng)閾值模式

          '根據(jù)低閾值和高閾值參數(shù)生成白色像素圖像regionWhite

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

        '對(duì)白色像素區(qū)域進(jìn)行一次1*1的開(kāi)運(yùn)算

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

        '對(duì)白色像素區(qū)域進(jìn)行一次1*1的閉運(yùn)算

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

    

    else                             '如果選擇自動(dòng)閾值模式

    

        Dim autoThresh               '定義自動(dòng)閾值模式下的二值化閾值

        '在grabImg圖像中的指定區(qū)域內(nèi)對(duì)圖像進(jìn)行自動(dòng)二值化處理,輸出二值化區(qū)域regionWhite 

        ZV_REAUTOTHRESH(grabImg, regionMask, regionWhite, 0)

        '對(duì)白色像素區(qū)域進(jìn)行一次1*1的開(kāi)運(yùn)算

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

        '對(duì)白色像素區(qū)域進(jìn)行一次1*1的閉運(yùn)算

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

        autoThresh = TABLE(0)

        ? "autoThresh = " autoThresh  '打印提示信息,當(dāng)前二值化閾值

      

    endif

    

    '計(jì)算BLOB面積

    

    ZV_REAREA(regionWhite, 2)              '計(jì)算regionWhite亮區(qū)域的面積,存放到table(2)中

      

    if(TABLE(2)>0) then '如果獲取到的白色像素?cái)?shù)量大于0                 

         ZV_REConNECT(regionWhite,re_connecte)     '計(jì)算區(qū)域的連通區(qū)域,存放到re_connecte列表中

         zv_refilter(re_connecte,0,d_detect_param(3),d_detect_param(4),0)'對(duì)區(qū)域列表中的區(qū)域進(jìn)行過(guò)濾,保留面積在 d_detect_param(3) 到 d_detect_param(4) 的區(qū)域,面積不在此范圍的區(qū)域?qū)⒈贿^(guò)濾掉

         zv_refilter(re_connecte,20,0.8,1.3,0)'對(duì)區(qū)域列表中的區(qū)域進(jìn)行過(guò)濾,保留最小外接矩形高寬比在0.9 到 1.1 的區(qū)域,面積不在此范圍的區(qū)域?qū)⒈贿^(guò)濾掉

         ZV_RESORT(re_connecte,1,1)          '對(duì)區(qū)域列表中的區(qū)域按照重心X的數(shù)據(jù)進(jìn)行升序排序

         ZV_LISTCOUNT(re_connecte,6)     '獲取列表中的連通區(qū)域的數(shù)量,存放到table(6)中 

    endif  

    

    '繪制效果圖

    Dim width, height

    ZV_IMGINFO (grabImg, 20)'獲取grabImg的圖像信息

    width = TABLE(20)

    height = TABLE(21)

    

    ZV_GRAYTORGB(grabImg,disImg)'將灰度圖轉(zhuǎn)換到RGB圖像,用于繪制檢測(cè)結(jié)果圖像

    

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

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

    

    for i=0 to TABLE(6)-1     '循環(huán)獲取小圓斑點(diǎn)的位置XY信息生成圓測(cè)量器,檢測(cè)圓心位置

          ZV_LISTGET(re_connecte,circle_connect,i)   '獲取列表中序號(hào)為i的元素,即依次獲取列表中小圓斑點(diǎn)的連通區(qū)域

          ZV_REAREACENTER(circle_connect,40)  '計(jì)算斑點(diǎn)區(qū)域的面積與中心位置,將位置放入TABLE(40)中

            ZV_MRGENCIRCLE(mr,TABLE(41),TABLE(42),70,50,0,360,1,10,8) '生成圓測(cè)量區(qū)域

            '設(shè)置測(cè)量參數(shù),包括濾波尺寸、邊緣閾值、邊緣極性和邊緣位置

          ZV_MRSETADV(mr,5, 50, 1,0)

          

          TABLE( 46, 0, 0, 0)'初始化結(jié)果數(shù)組

          '測(cè)量圓,并將結(jié)果賦值給起始地址為46的數(shù)組

          ZV_MRCIRCLE(mr, grabImg, tmp, 46)

           

          ZV_CIRCLE(disImg,TABLE(46),TABLE(47),TABLE(48),zv_color(0,255,0))'繪制小圓結(jié)果

          ShowString=TOSTR(i,1,0)   '將BLOB的數(shù)量轉(zhuǎn)換成字符串變量

          ZV_TEXT(disImg,ShowString,TABLE(46),TABLE(47),55,ZV_COLOR(0,0,255)) '顯示結(jié)果文本  

          ZV_MARKER(disImg,TABLE(46),TABLE(47),0,50,zv_color(0,255,0))   '在圖像img中繪制十字

          

          if is_ca_success=1 AND d_use_calib=1 then 

              ZV_CALTRANSW(ca_param, TABLE(46)+TABLE(48),TABLE(47),49) '圓心加半徑的坐標(biāo)

              ZV_CALTRANSW(ca_param, TABLE(46),TABLE(47),46) '使用標(biāo)定系數(shù)將圖像坐標(biāo)轉(zhuǎn)換成世界坐標(biāo)

              d_circle_rst(i*3+0)=TABLE(46)'將測(cè)量圓的結(jié)果賦值給圓心變量,顯示到界面中

              d_circle_rst(i*3+1)=TABLE(47)

              d_circle_rst(i*3+2)=ZV_DISTPP(TABLE(46),TABLE(47),TABLE(49),TABLE(50))

          else 

              d_circle_rst(i*3+0)=TABLE(46)'將測(cè)量圓的結(jié)果賦值給圓心變量,顯示到界面中

              d_circle_rst(i*3+1)=TABLE(47)

              d_circle_rst(i*3+2)=TABLE(48)

     endif      

     next

     ZV_LATCH(disImg, 0)     '在鎖存通道0中顯示結(jié)果圖像

     d_detect_time=ABS(TICKS)'計(jì)算檢測(cè)消耗時(shí)間

    

END SUB

image.png


11.在main.bas文件中添加HMI運(yùn)行界面按下運(yùn)行按鈕響應(yīng)的函數(shù),并關(guān)聯(lián)動(dòng)作函數(shù)名。


'HMI界面按下運(yùn)行按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_run()

    if(2 = main_task_state) then           '如果主任務(wù)處于運(yùn)行狀態(tài),打印提示信息并退出函數(shù)

     ?"已經(jīng)開(kāi)啟連續(xù)運(yùn)行任務(wù),請(qǐng)勿重復(fù)操作!"

    return 

    endif

   

    if (1 = main_task_state) then          '如果主任務(wù)處于停止?fàn)顟B(tài)

        if (0 = PROC_STATUS(main_task_id)) then '如果任務(wù)未開(kāi)啟

            main_task_state = 2            '主任務(wù)狀態(tài)設(shè)置為2,表示正在執(zhí)行連續(xù)任務(wù)

            RUNTASK  main_task_id, main_task  '開(kāi)啟主任務(wù)

        endif

    endif


END SUB


'主任務(wù)實(shí)現(xiàn)函數(shù)

main_task:

    while(1)

        if (3 = main_task_state) then      '如果主任務(wù)狀態(tài)處于3即按下停止按鈕時(shí)

            main_task_state = 1             '將主任務(wù)狀態(tài)置為1

            exit while                     '退出循環(huán)

        endif

        

        '重復(fù)執(zhí)行采集和檢測(cè)函數(shù)

        btn_grab()

        btn_test()     

    wend

END

image.png


12.在main.bas文件中添加HMI運(yùn)行界面按下停止按鈕響應(yīng)的函數(shù),并關(guān)聯(lián)動(dòng)作函數(shù)名。


'HMI界面按下停止按鈕時(shí)響應(yīng)的函數(shù)

GLOBAL SUB btn_stop()

    if (2 = main_task_state) then   '如果主任務(wù)狀態(tài)處于3即正在連續(xù)執(zhí)行任務(wù)時(shí)

        main_task_state = 3           '將主任務(wù)狀態(tài)置為3,退出循環(huán)

    endif  

END SUB

image.png


image.png


image.png


image.png


仿真演示效果4


本次,正運(yùn)動(dòng)技術(shù)機(jī)器視覺(jué)運(yùn)動(dòng)控制一體機(jī)應(yīng)用例程(三) BLOB分析的多圓定位,就分享到這里。


更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào),需要相關(guān)開(kāi)發(fā)環(huán)境與例程代碼,請(qǐng)咨詢正運(yùn)動(dòng)技術(shù)銷售工程師:400-089-8936。


本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來(lái)源。


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

上一篇: 機(jī)器視覺(jué)運(yùn)動(dòng)控制一體

推薦產(chǎn)品

更多
美女网站一区二区_在线观看日韩毛片_成人在线视频首页_欧美精品一区二区三区久久久_国产精品亚洲一区二区三区在线_日本免费新一区视频_日本美女一区二区三区_精品亚洲成a人_久久不见久久见免费视频1_91首页免费视频_欧美一区二区在线看_91精品91久久久中77777_天堂蜜桃一区二区三区_av在线一区二区_欧美不卡一区二区_欧美影视一区二区三区


        国产成人精品免费视频网站| 亚洲一区二区三区在线看| 精品一区二区免费在线观看| 国产欧美日韩另类视频免费观看| 欧美在线视频不卡| 国产专区一区二区| 国产一区二区视频在线| 伊人一区二区三区| 久久亚洲春色中文字幕久久久| 日韩一区二区三区资源| 91成人理论电影| 国产酒店精品激情| 日韩成人免费看| 亚洲高清免费视频| 国产精品传媒入口麻豆| 久久免费美女视频| 欧美mv日韩mv| 欧美日本一区二区三区| 伊人久久大香线蕉精品| 欧美极品色图| 国产在线一区二区三区播放| 精品乱码一区二区三区| 91首页免费视频| 国产高清视频一区| 91成人免费视频| 精品在线不卡| 色狠狠色噜噜噜综合网| 一区二区成人国产精品 | 免费成人在线观看视频| 亚洲国产精品一区二区www在线| 天堂在线一区二区| 午夜精品国产更新| 亚洲午夜精品久久久久久久久| 天天色天天操综合| 国产91精品露脸国语对白| 国产精品久久久久久久久久直播 | 鲁片一区二区三区| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 一区二区三区中文免费| 蜜桃一区二区三区在线观看| 成人av在线影院| 99精品国产一区二区三区不卡 | 欧美一区二区影视| 麻豆91蜜桃| 欧美日韩三级视频| 欧美韩国日本综合| 国产精品久久国产精麻豆99网站| 性欧美大战久久久久久久久| 亚洲一二三区视频在线观看| 国产盗摄一区二区三区| 久久偷窥视频| 欧美成人女星排名| 亚洲一卡二卡三卡四卡无卡久久| 成人激情图片网| 色婷婷综合久色| 91精品国产综合久久福利软件 | 精品国产乱码久久久久久88av| 欧美在线免费观看亚洲| 国产精品国产三级国产三级人妇 | 亚洲精品国产精品乱码不99 | 国产成人av影院| 日韩精品久久久毛片一区二区| 精品久久久久99| 亚洲国产成人在线| 国精产品一区一区三区mba视频| 成人精品电影在线观看| 少妇免费毛片久久久久久久久| 欧美性生活影院| 欧美r级在线观看| 日韩国产欧美一区二区三区| 精品高清视频| 久久精品在线观看| 一区二区三区欧美久久| 91在线porny国产在线看| 色狠狠色狠狠综合| 亚洲情趣在线观看| 精品一区二区三区视频在线观看| 精品一区在线播放| 欧美精品一区男女天堂| 国产一区二区三区在线看麻豆| 亚洲一区不卡在线| 一区二区理论电影在线观看| 国产日韩欧美一区二区三区四区 | 国产精品你懂的在线欣赏| 亚洲第一福利视频在线| 国产高清精品一区| 一本大道av一区二区在线播放 | 午夜国产精品一区| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 精品久久久久一区二区国产| 激情亚洲综合在线| 欧美性猛交一区二区三区精品| 亚洲成人自拍偷拍| 色婷婷精品国产一区二区三区| 亚洲色图另类专区| 国产91高潮流白浆在线麻豆 | 精品国产制服丝袜高跟| 国产毛片精品视频| 9191成人精品久久| 亚洲麻豆国产自偷在线| 国内视频一区二区| 中文字幕高清不卡| 国产一区二区久久久| 欧美国产精品一区| 国产精品一区在线观看| 中文字幕日本乱码精品影院| 国产精华液一区二区三区| 欧美剧情电影在线观看完整版免费励志电影 | 免费国产在线精品一区二区三区| 成人免费在线视频观看| 久久国产精品久久| 精品久久人人做人人爰| 成人免费视频caoporn| 色偷偷88欧美精品久久久| 麻豆精品一二三| 欧美美女一区二区在线观看| 风间由美一区二区av101 | 亚洲r级在线视频| 椎名由奈jux491在线播放| 毛片基地黄久久久久久天堂| 欧美日韩1区2区| 9l国产精品久久久久麻豆| 7777精品伊人久久久大香线蕉的 | 26uuu精品一区二区| 91免费看蜜桃| **欧美大码日韩| 亚洲一区精品视频| 国模无码大尺度一区二区三区| 精品久久免费看| 久久国产欧美精品| 日韩有码一区二区三区| 91精品国产丝袜白色高跟鞋| www.久久久| 久久一日本道色综合| 国产传媒一区二区三区| 亚洲一区二区av电影| 欧美自拍丝袜亚洲| av成人免费在线| 亚洲尤物视频在线| 欧美三级日韩三级| 久久福利视频一区二区| 色香蕉久久蜜桃| 国产传媒久久文化传媒| 中文字幕免费在线观看视频一区| 日韩动漫在线观看| 国产成人综合网站| 国产精品久久久久久久浪潮网站| 伊人天天久久大香线蕉av色| 国产高清不卡二三区| 亚洲丝袜精品丝袜在线| 欧美色图激情小说| 国产精品xxx在线观看www| 日韩在线a电影| 久久久91精品国产一区二区三区| 亚洲一区二区三区精品在线观看 | 亚洲aⅴ天堂av在线电影软件| 国内精品在线播放| 国产精品国产三级国产a| 欧洲一区二区三区在线| 成人欧美一区二区三区黑人免费| 日韩中文字幕不卡| 欧美韩日一区二区三区| 欧美视频一区在线| 久久免费99精品久久久久久| 国产精品一区二区免费不卡| 一个色在线综合| 久久奇米777| 在线中文字幕一区| 精品国产一区二区三区免费| 国产成人小视频| 亚洲成a人v欧美综合天堂下载 | 一区二区视频在线| 欧美大度的电影原声| 伊人狠狠色丁香综合尤物| 国产精品成人一区二区三区| 国产一区二区精品久久| 亚洲成人www| 中文字幕免费不卡| 日韩三级高清在线| 黑人巨大精品欧美一区二区小视频 | 大尺度一区二区| 蜜臀久久99精品久久久久宅男| 中文字幕在线观看不卡| 欧美不卡一二三| 欧美日韩国产不卡| 亚洲欧美综合一区| 国产成人精品www牛牛影视| 一二三四区精品视频| 国产日韩欧美电影| 亚洲精品国产精品久久| 久久偷看各类wc女厕嘘嘘偷窃 | 91原创国产| 久久国产夜色精品鲁鲁99| 亚洲夂夂婷婷色拍ww47| 亚洲国产成人在线| 精品人在线二区三区| 欧美久久久久久久久久| 91九色最新地址| 中文字幕中文字幕99| 日韩欧美一区二区在线观看 |