OpenCV неправильная позиция от ключевых точек - PullRequest
0 голосов
/ 03 декабря 2018

Я не знаю, что здесь не так, точки, нарисованные из функции (cv2.drawMatchesKnn), находятся в хорошей позиции, но точки, нарисованные из цикла, находятся в плохой позиции.На картинке это хорошо видно.Я знаю, что может быть небольшой сдвиг, но он полностью их пропускает.

if len(self.frame_kps) > 0:
        if self.t_matcher == "flann":
            matches = self.matcher.knnMatch(self.base_desc,self.frame_desc,k=2)

        goodMatch=[]
        good_without_list = []
        for m,n in matches:
            if(m.distance<matcher_dist*n.distance):
                goodMatch.append([m])
                good_without_list.append(n)

        if(len(goodMatch)>=self.MIN_MATCH):
            self.matches = cv2.drawMatchesKnn(self.base_gray,self.base_kps,gray,self.frame_kps,goodMatch,None,flags=2)

            for g in good_without_list:
                keyPoint = self.frame_kps[g.queryIdx]
                (x1,y1) = keyPoint.pt        
                cv2.circle(self.matches, (int(x1),int(y1)), 4, (255, 0, 0), 1)  

Что здесь не так?

https://i.stack.imgur.com/FIziK.png

1 Ответ

0 голосов
/ 03 декабря 2018

Вам нужно будет добавить ширину base_gray width к x координатам frame_kps, чтобы получить ее прямо на финальном дисплее.

Это потому, что ваша ничья совпадает, объединяет 2 изображения вместе, что меняет конечную позициюиз точек на дисплее.

 h, w = numpy.shape(self.base_gray)
 for g in goodMatch:
                keyPoint = self.frame_kps[g.trainIdx]
                (x1,y1) = keyPoint.pt   
                x1 = x1 + w
                cv2.circle(self.matches, (int(x1),int(y1)), 4, (255, 0, 0), 1)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...