利用OpenCV读图绘制栅格导航
利用OpenCV讀圖繪制柵格導航
- 實現效果
- 利用PC的繪圖工具預處理圖像
- 利用OpenCV識別圖像得出障礙點信息
- 圖像像素row和col的解釋
- 查看圖像數據
- 將index數據導入MATLAB繪制柵格
- 本章小結
實現效果
獲得的某個地圖.jpg如圖所示,最后實現效果在MATLAB中繪制出柵格地圖
利用PC的繪圖工具預處理圖像
例如:獲得的圖片test.jpg在繪圖軟件顯示像素大小為412162,導入到MATLAB的柵格個數也為412162不大合理,因此在繪圖軟件重新調整圖片大小,使得一個像素對應一個柵格點,這里按照比例縮放成大小為40*15個柵格矩陣。
利用OpenCV識別圖像得出障礙點信息
OpenCV識別障礙物信息的程序步驟:
1、讀圖
2、將圖片裝換成二值圖
3、獲取像素點信息(這里獲取的是索引值)
4、將數據存入.txt文件用于MATLAB讀取
OpenCV讀圖的具體程序,值得注意的是,測試圖片本身就兩種顏色,黑和白,如果需要識別其他信息,利用OpenCV的閾值處理,來化成你所需要的的二值圖。
import cv2 # 讀取圖片 img = cv2.imread('test.jpg') # 將圖片進行二值化處理 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret,img_bin = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)# 查看處理的圖像是否符合要求 cv2.imshow("img_bin", img_bin) cv2.waitKey(0) cv2.destroyAllWindows()''' 對圖像進行像素點捕捉,其中0表示黑,255表示白 row和col表示圖像的行列,像素[row,col]對應其所處位置的像素點的值 image_line 存放線性值圖片,1表示障礙物,0表示自由區 image_index存放圖片像素點的索引值,參考MATLAB的ind2sub函數解釋 '''# 獲取圖片像素行列高度 row,col = img_bin.shape# 定義數據類型 image_line = [] index = 0 image_index = []# 循環判斷像素點信息 for c in range(col):for r in range(row):index = index + 1if img_bin[r,c] == 0:image_line.append(1)image_index.append(index)else:image_line.append(0)image_line.append('^p')# 寫入地圖數據到txt文件 file = open('data_map.txt','w') file.write(str(image_line)); file.close()# 寫入索引數據到txt文件 file = open('data_index.txt','w') file.write(str(image_index)); file.close()圖像像素row和col的解釋
圖片在OpenCV里各個像素對應的點關系為:
查看圖像數據
打開data_map.txt復制到Word中,在替換功能里,將’^p’替換成 ^p實現換行,復制數據到txt文查看效果更佳;
將data_index.txt數據的開頭 [ 和末尾 ] 符號刪除
data_map數據的效果:
將index數據導入MATLAB繪制柵格
將去了開頭 [ 和末尾 ] 的data_index數據導入MATLAB
按照下面程序讀取index數據進行路徑規劃,路徑規劃參考鏈接: 5 MATLAB與柵格路徑規劃算法(1 柵格化圖像和dijkstra算法).
clc; clear; data = load('data.txt');XRows = 40; YCols = 15; StartCoord = [3,6]; GoalCoord = [35,2];[obsx,obsy] = ind2sub([YCols,XRows],data); ObsCoord = [obsy' obsx'];[Opt,Field] = Dijkstra_main(XRows,YCols,StartCoord,GoalCoord,ObsCoord);實現路徑規劃效果:
本章小結
1、柵格地圖在MATLAB的復現程度取決于像素點,所以可以不在繪圖軟件中修改圖片尺寸,OpenCV獲取到row和col按照等分關系也可以復現地圖
2、圖片地圖和MATLAB的地圖存在反轉關系,可以考慮利用繪圖軟件先將圖片豎直反轉再去讀圖
總結
以上是生活随笔為你收集整理的利用OpenCV读图绘制栅格导航的全部內容,希望文章能夠幫你解決所遇到的問題。