1. 程式人生 > >halcon學習筆記(13)——二維碼識別及簡單定位

halcon學習筆記(13)——二維碼識別及簡單定位

前面說了利用halcon進行二維碼的識別,這次進行二維碼識別及方向定位,雖然二維碼本身也有定位和方向性,但是我沒有在halcon運算元裡找到這個函式或調出這個引數的方法;不過可以通過在二維碼附近新增mark圖形來進行角度和方向識別,這樣在AGV小車應用中就可作為地標識別程式了,當然AGV小車應用的話很少是window系統,一般是嵌入式linux系統,雖然halcon支援linux系統,且QT也支援跨平臺,不過不太熟linux系統如何操作,有待學習;所以要想真正應用在像亞馬遜kiva機器人進行地標識別,還需要將做硬體處理,即將平臺換為linux並且用低功率板子做開發;當然安卓也能開發;另外一切感測器廠商已經直接集成了二維碼定位感測器,比如倍加福等,這種感測器體積小,精度高,穩定性好,but價格高;不過halcon畢竟是廠商的軟體用起來還是要注意版權的問題,這點不如opencv了;好了廢話說了這麼多程式碼直接上了;主體還是前面講的的二維碼程式,這裡指列出方向定位程式,處理圖片如下:

程式碼如下:

        select_obj (SymbolXLDs, SymbolXLD, i+1)
        get_contour_xld (SymbolXLD, Row, Col)
        get_string_extents (WindowHandle, DecodedDataStrings[i], Ascent, Descent, TxtWidth, TxtHeight)
        disp_message (WindowHandle, DecodedDataStrings[i], 'image',20, 20, 'red', 'true')
              
        area_center_xld (SymbolXLD, Area, Row1, Column, PointOrder)
        *獲取xld引數
        elliptic_axis_xld (SymbolXLD, Ra, Rb, Phi)
        *外接橢圓並判斷方向
        bin_threshold (ImageRectifiedFixed, Region)
        *自動灰度直方塊圖
        connection (Region, ConnectedRegions1)
        *求聯通區域
        select_shape (ConnectedRegions1, SelectedRegions, 'area', 'and', 15441.5, 21905)
        *選擇特徵直方塊圖
        orientation_region (SelectedRegions, Phi_1)
        *求特徵的方向
        area_center (SelectedRegions, Area_1, Row_1, Column_1) 
        *求特徵的中心
 
        dev_set_line_width (3)  
        dev_set_draw ('margin') 
        dev_set_color ('blue')
        Length := 80  
       disp_arrow (WindowHandle, Row1[0], Column[0], Row1[0] - Length * sin(Phi[0]), Column[0] + Length * cos(Phi[0]), 4)  
       disp_message (WindowHandle, deg(Phi[0])$'3.1f' + ' deg', 'image', Row1[0], Column[0] - 100, 'black', 'false')  
        
       disp_arrow (WindowHandle, Row_1[0], Column_1[0], Row_1[0] - Length * sin(Phi_1[0]), Column_1[0] + Length * cos(Phi_1[0]), 4)  
       disp_message (WindowHandle, deg(Phi_1[0])$'3.1f' + '度', 'image', Row_1[0], Column_1[0] - 100, 'blue', 'false')