我尝试使用以下代码:
xCoordinate=point.x
(该点是cv2.keyPoint
类型)
它给我一个错误,说cv2.keyPoint
没有属性'x'
出现错误,指出
cv2.keyPoint
没有'x'属性。x = point.pt[0]
y = point.pt[1]
(x,y) = point.pt
OpenCV 提供了一个函数来实现此功能。您可以运行:
pts = cv2.KeyPoint_convert(kp)
您可以使用:
import numpy as np
pts = np.float([key_point.pt for key_point in kp]).reshape(-1, 1, 2)
pts
将是一个关键点的数组。
突出点检测器的数据结构。
Point2f pt -- 关键点的坐标
float size -- 有意义的关键点邻域的直径
float angle ...¶
因此,point.pt
是一个Point2f。
尝试x,y= point.pt
point.pt.x
is invalid, please correct it as: x, y = point.pt
- Nirmal以下是我的代码示例:
import cv2, os
import numpy as np
import matplotlib.pyplot as plt
# INITIALISATION
filename = os.path.join('foo', 'bar.jpg')
img0 = cv2.imread(filename) # original image
gray = cv2.cvtColor(img0, cv2.COLOR_BGR2GRAY) # convert to grayscale
sift = cv2.xfeatures2d.SIFT_create() # initialize SIFT
f, (ax1, ax2) = plt.subplots(1, 2) # create subplots
# DETECT AND DRAW KEYPOINTS
# sift.detect() returns a list of keypoints
# keypoint is a standard class of opencv (not just SIFT-related)
kp = sift.detect(gray,None) # calculates SIFT points
img1=cv2.drawKeypoints(gray,kp, None) # mae new image with keypoints drawn
ax1.imshow(img1) # plot
# RETREIVE KEYPOINTS COORDINATES AND DRAW MANUALLY
# Reade these and make numpy array
pts = np.asarray([[p.pt[0], p.pt[1]] for p in kp])
cols = pts[:,0]
rows = pts[:,1]
ax2.imshow(cv2.cvtColor(img0, cv2.COLOR_BGR2RGB))
ax2.scatter(cols, rows)
plt.show()
kp,des = surf.detectAndCompute(img,None)
pts = [p.pt for p in kp]
kp = sift.detect(old_frame, None)
pts0 = cv2.KeyPoint.convert(kp).reshape(-1, 1, 2)