[問題] 請問如何提取單點週遭的座標資訊

看板C_and_CPP作者 (我來搞事了)時間1年前 (2022/06/04 19:54), 1年前編輯推噓6(6038)
留言44則, 6人參與, 1年前最新討論串1/1
各位前輩好 小弟最近要開發具有fitting點的功能(用於光斑偵測) 在這之前,必須先計算出該光斑內所有的點位置(假設光斑大小剛好涵蓋3*3個pixel,我 想取得包含光斑內共5*5個pixel的所有資料) 那麼假設我先在分析圖案上,用blob選定了一點(x1,y1) 該點的強度與位置能使用opencv的ptr獲取 那如果我想提取已該點為中心,向外擴展使用者自訂的n*n矩陣中,所有點的資訊 例如: 我在image上抓到一點O,該如何做才能自動獲得以O為中心 5*5的範圍內所有a點的x軸、y軸座標資訊呢? . . . . . . . . . . . . . . . . . a a a a a . . . a a a a a . . . a a O a a . . . a a a a a . . . a a a a a . . . . . . . . . . . . . . . . . . 可能問題有點白痴 我知道可以操控像是i+1、j-1等,將個別點存入[ ]中 但我一開始偵測到的點(例如O點)的資料型態是vector < vector < point > > 實在是不曉得該如何將週遭x與y的資料分開並抽出來 懇請板上高手指點迷津 謝謝>< -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.141.86.158 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1654343686.A.8C2.html ※ 編輯: Vvvahc (223.141.86.158 臺灣), 06/04/2022 19:58:36

06/04 20:26, 1年前 , 1F
Mat(Rect) ?
06/04 20:26, 1F
※ 編輯: Vvvahc (125.230.97.22 臺灣), 06/04/2022 20:35:05

06/04 20:38, 1年前 , 2F
rect是以該點為左上角起點,分別向下及向右取範圍資料
06/04 20:38, 2F

06/04 20:38, 1年前 , 3F
跟我預設該點為中心來取週圍值好像有點不一樣
06/04 20:38, 3F

06/04 20:57, 1年前 , 4F
input output 寫明確一點..
06/04 20:57, 4F

06/04 21:05, 1年前 , 5F
input :
06/04 21:05, 5F

06/04 21:05, 1年前 , 6F
vector<vector<point>> initial_point
06/04 21:05, 6F

06/04 21:05, 1年前 , 7F
我希望output 可以導出initial_point
06/04 21:05, 7F

06/04 21:05, 1年前 , 8F
(例如上面的O點)週圍5*5的區域中,每個點的x值與y值
06/04 21:05, 8F

06/04 21:05, 1年前 , 9F
(會有2筆儲存資料,一筆是所有的x點位置,另一筆是所有y點
06/04 21:05, 9F

06/04 21:05, 1年前 , 10F
位置)
06/04 21:05, 10F
※ 編輯: Vvvahc (125.230.97.22 臺灣), 06/04/2022 21:33:25

06/05 00:27, 1年前 , 11F
所以輸入是表示什麼? 型態是點座標的二維陣列,
06/05 00:27, 11F

06/05 00:27, 1年前 , 12F
為什麼會是二維陣列? 它表示了什麼東西?
06/05 00:27, 12F

06/05 00:28, 1年前 , 13F
你抓到的「那一點 O」會怎麼出現在這個二維陣列中?
06/05 00:28, 13F

06/05 00:29, 1年前 , 14F
上面問的「寫明確一點」是要你去了解這些問題
06/05 00:29, 14F

06/05 00:29, 1年前 , 15F
不然連你都不知道你抓的東西怎麼表示了我們怎麼知道怎麼做?
06/05 00:29, 15F

06/05 00:30, 1年前 , 16F
那如果 (我的水晶球突然亮了) 這其實才是你的問題所在
06/05 00:30, 16F

06/05 00:31, 1年前 , 17F
那你應該要詳細地說你用 opencv 是怎麼寫去抓到的資料
06/05 00:31, 17F

06/05 00:32, 1年前 , 18F
只寫一個「用 ptr 獲取」我們哪知道你的 ptr 是什麼...
06/05 00:32, 18F

06/05 04:42, 1年前 , 19F
原po應該是不知道去哪找來兩段演算法程式,前段輸
06/05 04:42, 19F

06/05 04:42, 1年前 , 20F
出一個2維稀疏
06/05 04:42, 20F

06/05 04:42, 1年前 , 21F
的光斑矩陣,後段需要x,y兩軸各自紀錄一軸位置範圍
06/05 04:42, 21F

06/05 04:42, 1年前 , 22F
的陣列,然後
06/05 04:42, 22F

06/05 04:42, 1年前 , 23F
不想花心力看懂兩段算法跟他們的資料結構,所以連
06/05 04:42, 23F

06/05 04:42, 1年前 , 24F
問題都問不清楚
06/05 04:42, 24F

06/05 04:42, 1年前 , 25F
06/05 04:42, 25F

06/05 11:42, 1年前 , 26F
對 我使用opencv的findcontours(Mat intput_img, vector
06/05 11:42, 26F

06/05 11:42, 1年前 , 27F
<vector<point>> contours,vector<Vec4i>hierarchy)
06/05 11:42, 27F

06/05 11:45, 1年前 , 28F
其中contours會儲存偵測到的點
06/05 11:45, 28F

06/05 11:45, 1年前 , 29F
但我不曉得該如何有效取出x、y的一維陣列資料
06/05 11:45, 29F

06/05 11:48, 1年前 , 30F
以及操作取得這點週圍所有點的一維資料
06/05 11:48, 30F

06/05 14:31, 1年前 , 31F
drawContours->dilate->mask
06/05 14:31, 31F

06/05 15:32, 1年前 , 32F
拜見樓上幾位通靈王<o>
06/05 15:32, 32F

06/05 18:20, 1年前 , 33F
抱歉 可能我是c++新手不曉得要怎麼實作功能出來,也表達
06/05 18:20, 33F

06/05 18:20, 1年前 , 34F
不夠清楚
06/05 18:20, 34F

06/05 18:20, 1年前 , 35F
如果可以的話,請至少告訴我資料型態為二維向量的點,該如
06/05 18:20, 35F

06/05 18:20, 1年前 , 36F
何有效率的獲取該點週圍共8個點的一維向量就好
06/05 18:20, 36F

06/05 22:17, 1年前 , 37F
那這就是你沒有搞清楚 opencv 是怎麼回傳它看到的東西了
06/05 22:17, 37F

06/05 22:18, 1年前 , 38F
findContours 回給你的二維陣列, 第一維是各 contour
06/05 22:18, 38F

06/05 22:18, 1年前 , 39F
第二維是 contour 座標; 那你這裡就要想想到底
06/05 22:18, 39F

06/05 22:19, 1年前 , 40F
findContours 是不是真的是你要的, 因為它是回傳
06/05 22:19, 40F

06/05 22:19, 1年前 , 41F
繞這一個 contour 四周的座標, 但你卻想要中心亮斑座標
06/05 22:19, 41F

06/05 22:20, 1年前 , 42F
opencv 回給你邊界, 你想要的是中間, 那難怪你無從下手
06/05 22:20, 42F

06/05 22:22, 1年前 , 43F
你去問問你的同事或其他做過類似功能的人他們是用什麼函數
06/05 22:22, 43F

06/06 09:29, 1年前 , 44F
contour(輪廓),想要重心可以用cv::moments
06/06 09:29, 44F
文章代碼(AID): #1YcqW6Z2 (C_and_CPP)