我想使用Python中的OpenCV提取圖像中曲線的座標。然而,我需要這些座標排列在列表中,使得列表中的第一個元素是曲線的一個末端,第二個元素是該末端旁邊的點等,直到最後一個元素是另一個末端。使用OpenCV(Python)查找曲線座標
說我有字母「C」,用的OpenCV導入爲以下numpy的陣列的圖像:
arr=
[0,0,0,0,0,0,0
0,0,1,1,1,0,0
0,0,1,0,0,0,0
0,0,1,0,0,0,0
0,0,1,1,1,0,0
0,0,0,0,0,0,0]
然後我想列表返回像素的座標按以下順序:
arr=
[0,0,0,0,0,0,0
0,0,3,2,1,0,0
0,0,4,0,0,0,0
0,0,5,0,0,0,0
0,0,6,7,8,0,0
0,0,0,0,0,0,0]
即列表(數組中像素「1」的座標,像素「2」的座標等)。
這種「連續性」的思想在findContours()中存在一些,但對於找到這樣一個1像素寬的物體的輪廓來說效果不佳。許多像素拿出兩倍生成的輪廓(不是一個太大的問題),但它也可能不是一個末端開始,在訂單如
arr=
[0,0,0,0,0,0,0
0,0,1,7,8,0,0
0,0,2,0,0,0,0
0,0,3,0,0,0,0
0,0,4,5,6,0,0
0,0,0,0,0,0,0]
屈服點座標這是因爲算法基本上從1到6比回到1,進入8並返回到1以產生「輪廓」。 我也嘗試過簡單的閾值+ numpy.nonzero,這當然是我想不命令他們,就在
arr=
[0,0,0,0,0,0,0
0,0,1,2,3,0,0
0,0,4,0,0,0,0
0,0,5,0,0,0,0
0,0,6,7,8,0,0
0,0,0,0,0,0,0]
我缺少的東西到大的順序產生?我對Python或圖像處理並不陌生,但我剛開始使用OpenCV。
'Moore-Neighbour Tracing'看起來很有前途,我得試試它 –