與一羣朋友一起,我們試圖完成Raspberry Pi上的計算機視覺任務,使用OpenCV庫使用C++進行編碼。使用OpenCV 3查找對象的順序
讓我先解釋一下任務。 有一個由16個獨立正方形組成的圖案,每個正方形都是紅色,黃色或藍色。我們正在使用相機模塊在四軸飛行器上安裝rasperry pi並收集圖案的視頻輸入。
我們必須檢測很容易完成的方塊的顏色,並在網上進行一些研究。棘手的部分是我們必須檢測正方形的順序,以便按順序保存數組中的顏色。
到目前爲止,我們已經完成了過濾所需的顏色(紅色,黃色,藍色)以確定正方形。
example pattern to recognize and our process so far
在第二圖像,我們知道每個方塊的顏色和中心點。我們需要的是按照文件或屏幕順序編寫它們的方法。
爲了找到順序,我們嘗試了幾種可以找到角點的OpenCV方法。利用角點,我們比較了每個點和確定的端點,以便繪製一個邊界矩形並克服一點扭曲。
但是由於quadcopter獲取視頻流,總會有高失真的機會。這弄亂了我們的角落理論,導致錯誤的顏色順序。例如,它可以捕捉圖像是這樣的:
這是不正確的,通過比較它們的中心點找到這些正方形的順序。它也無法找到端點在它們周圍畫一個更大的矩形來平坦化圖案。然後訂購...
我要求的是算法的建議。我們是否完全朝錯誤的方向努力尋找角落?是否可以在不考慮失真的情況下確定訂單?
在此先感謝。
使用cv :: minAreaRect在你的所有盒子周圍獲得一個旋轉的邊界矩形。然後選擇一個角落作爲網格的左上角(對於失真> = 45度不明確)並計算相對於旋轉的邊界矩的中心點內容(例如,通過旋轉所有中心點)。 – Micka
使用旋轉的邊界矩陣作爲基礎,您甚至可以猜測網格(如果知道網格大小),並選擇最適合每個猜測網格位置的分段顏色框。 – Micka