日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用OpenCV读图绘制栅格导航

發(fā)布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用OpenCV读图绘制栅格导航 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

利用OpenCV讀圖繪制柵格導(dǎo)航

  • 實現(xiàn)效果
  • 利用PC的繪圖工具預(yù)處理圖像
  • 利用OpenCV識別圖像得出障礙點信息
  • 圖像像素row和col的解釋
  • 查看圖像數(shù)據(jù)
  • 將index數(shù)據(jù)導(dǎo)入MATLAB繪制柵格
  • 本章小結(jié)

實現(xiàn)效果

獲得的某個地圖.jpg如圖所示,最后實現(xiàn)效果在MATLAB中繪制出柵格地圖

利用PC的繪圖工具預(yù)處理圖像

例如:獲得的圖片test.jpg在繪圖軟件顯示像素大小為412162,導(dǎo)入到MATLAB的柵格個數(shù)也為412162不大合理,因此在繪圖軟件重新調(diào)整圖片大小,使得一個像素對應(yīng)一個柵格點,這里按照比例縮放成大小為40*15個柵格矩陣。

利用OpenCV識別圖像得出障礙點信息

OpenCV識別障礙物信息的程序步驟:

1、讀圖
2、將圖片裝換成二值圖
3、獲取像素點信息(這里獲取的是索引值)
4、將數(shù)據(jù)存入.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]對應(yīng)其所處位置的像素點的值 image_line 存放線性值圖片,1表示障礙物,0表示自由區(qū) image_index存放圖片像素點的索引值,參考MATLAB的ind2sub函數(shù)解釋 '''# 獲取圖片像素行列高度 row,col = img_bin.shape# 定義數(shù)據(jù)類型 image_line = [] index = 0 image_index = []# 循環(huán)判斷像素點信息 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')# 寫入地圖數(shù)據(jù)到txt文件 file = open('data_map.txt','w') file.write(str(image_line)); file.close()# 寫入索引數(shù)據(jù)到txt文件 file = open('data_index.txt','w') file.write(str(image_index)); file.close()

圖像像素row和col的解釋

圖片在OpenCV里各個像素對應(yīng)的點關(guān)系為:

查看圖像數(shù)據(jù)

打開data_map.txt復(fù)制到Word中,在替換功能里,將’^p’替換成 ^p實現(xiàn)換行,復(fù)制數(shù)據(jù)到txt文查看效果更佳;
將data_index.txt數(shù)據(jù)的開頭 [ 和末尾 ] 符號刪除
data_map數(shù)據(jù)的效果:

將index數(shù)據(jù)導(dǎo)入MATLAB繪制柵格

將去了開頭 [ 和末尾 ] 的data_index數(shù)據(jù)導(dǎo)入MATLAB

按照下面程序讀取index數(shù)據(jù)進行路徑規(guī)劃,路徑規(guī)劃參考鏈接: 5 MATLAB與柵格路徑規(guī)劃算法(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);

實現(xiàn)路徑規(guī)劃效果:

本章小結(jié)

1、柵格地圖在MATLAB的復(fù)現(xiàn)程度取決于像素點,所以可以不在繪圖軟件中修改圖片尺寸,OpenCV獲取到row和col按照等分關(guān)系也可以復(fù)現(xiàn)地圖
2、圖片地圖和MATLAB的地圖存在反轉(zhuǎn)關(guān)系,可以考慮利用繪圖軟件先將圖片豎直反轉(zhuǎn)再去讀圖

總結(jié)

以上是生活随笔為你收集整理的利用OpenCV读图绘制栅格导航的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。