理論上這應該不是個問題,因爲角點檢測能夠把每個點標出來,自然肯定是能獲取其中的座標。但是我用到fast角點檢測的時候,卻發現這是個問題。原因在於他存取的數據結構比較特別,是“keypoint”(指的是python,其他語言的沒有試過)。直接print它,並不會想當然的輸出座標,而是一些奇怪的東西:
[, , ]
就是這樣的東西,並不是座標。但是,這肯定是可以獲取到座標的,網上找了一點時間,終於發現其中的“套路”。其實,直接print,只能輸出這個矢量的一些基本信息,就比如只能輸出他的名字“keypoint”和地址或者大小信息。卻得不到他裏面具體的信息。
具體介紹看:http://www.cnblogs.com/cj695/p/4041399.html
下面給出代碼如何獲取座標:
# -*- coding: utf-8 -*
import numpy as np
import cv2
img = cv2.imread('qqb.png')
fast = cv2.FastFeatureDetector()
kp = fast.detect(img,None)
#print kp#不會print座標
#這個函數專門針對keypoint
img2 = cv2.drawKeypoints(img, kp, color=(255,0,0))
j=len(kp)#其實這個地方可以理解成數組
tracks=[]
#循環獲取座標值
for i in range(0,j):
tracks.append([ kp[i].pt])#是不是有點相像數組,但是又不同
print tracks#輸出座標