halcon學習筆記(13)——二維碼識別及簡單定位
阿新 • • 發佈:2019-01-06
前面說了利用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')