#python #opencv #sift #keypoint
#python #opencv #просеять #ключевая точка
Вопрос:
У меня есть кортеж (ключевые точки, дескрипторы), извлеченный с img1
помощью метода:
(kp, des) = sift.detectAndCompute(img1,None)
kp
это список, содержащий cv2.KeyPoint
объекты, и
des
numpy.array
содержащий их 128-мерные дескрипторы
Я хочу получить для каждой ключевой точки значение пикселя, взятое из другого изображения img2
того же размера, и сохранить их в кортеже (kp, des)
, чтобы в итоге получить кортеж, подобный (kp, des, pixel_values)
Заранее большое вам спасибо.
Ответ №1:
Вы можете получить доступ к координатам пикселей из kp. Как показано ниже:
kp[0].pt
и я думаю, что следующий код делает то, что вы хотите:
(kp[i], des[i], img2[kp[i].pt] for i in range(len(kp)))
Комментарии:
1. Спасибо за ваш ответ, но я хочу получить значения пикселей из IMG2, а не координаты пикселей.
2. для получения значений пикселей необходимо использовать координаты пикселей. kp[i].pt возвращает координаты пикселей, на которые указывает i-я ключевая точка. если вы хотите получить значение пикселя этой точки, вам следует использовать координаты. Однако, если вы хотите сопоставить ключевые точки в обоих изображениях, а не извлекать значение пикселя из соответствующих ключевых точек, вам следует использовать методы сопоставления объектов, такие как flann или BFMatcher.