2016-11-07 332 views
2

我試圖獲取並在圖像中繪製角點。現在,我有一個使用以下格式的元組列表:(row,column,scale)(規模是因爲我使用的是高斯金字塔),它是從harrisCornerDetector和nonMaximumSupression過程手動獲得的。該列表是featuresy1如何在Python中使用OpenCV cornerSubPix()?

我的代碼如下:

r,g,b=cv2.split(image) 
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) 
cv2.cornerSubPix(r, featuresy1, (5,5), (-1,1), criteria) 

其中圖像是在灰度與三個相同形狀的圖像。正如你所看到的,我給cornerSubPix作爲第二個參數是這樣的結構:[(x1,y1,scale1),(x2,y2,scale2),...,(xn,yn,scalen)]

這是拋出了以下錯誤:

cv2.cornerSubPix(r, featuresy1, (5,5), (-1,1), criteria) 
TypeError: corners is not a numpy array, neither a scalar 

出於這個原因,我不知道是什麼類型,格式或結構應具有featuresy1cornerSubPix()工作。這是我做錯的唯一的事情嗎?沒有太多關於這方面的文件。

謝謝!

回答

0

您需要確保corners是3維(n, 1, 2)的numpy陣列,其中n是角的數量。它也必須是一個float32類型。

只需鍵入

corners.shape 

驗證這一點。

鍵入

corners.dtype 

要檢查你正在使用FLOAT32。

對我來說,看起來像你的角落featuresy1列出它應該是一個numpy數組。首先將其轉換爲一個numpy的數組:

featuresy1 = np.array(featuresy1) 

OpenCV的一個易於understand example可以幫助你