Извлечение значений пикселей из изображения для объектов CV2.Keypoints

#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.