Перейти к содержимому
Compvision.ru

Вадим

Пользователи
  • Количество публикаций

    1
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Вадим


  1. Добрый день, я хочу по шаблону найти количество таких на снимке, после нахождения keypoints на первой и второй картинке knnMatch, но не понимаю как правильно определить количество объектов в результатах?

    Рисует всегда один белый прямоугольник если обьект найден, даже если обьектов несколько, хотелось бы узнать как найти количество этих обьектов.

    части кода кода:
    
    kp1, desc1 = detector.detectAndCompute(img1, None)
    kp2, desc2 = detector.detectAndCompute(img2, None)
    def filter_matches(kp1, kp2, matches, ratio = 0.75):
    # def filter_matches(kp1, kp2, matches, ratio = 0.75):
        mkp1, mkp2 = [], []
        for m in matches:
            if len(m) == 2 and m[0].distance < m[1].distance * ratio:
                m = m[0]
                mkp1.append( kp1[m.queryIdx] )
                mkp2.append( kp2[m.trainIdx] )
        p1 = np.float32([kp.pt for kp in mkp1])
        p2 = np.float32([kp.pt for kp in mkp2])
        kp_pairs = zip(mkp1, mkp2)
        return p1, p2, list(kp_pairs)
    raw_matches = matcher.knnMatch(desc1, trainDescriptors = desc2, k = 2)
    matcher.knnMatch(desc1, trainDescriptors = desc2, k = 2)
    p1, p2, kp_pairs = filter_matches(kp1, kp2, raw_matches)
    if len(p1) >= 4:
        H, status = cv2.findHomography(p1, p2, cv2.RANSAC, 5.0)    
        h1, w1 = img1.shape[:2]
        h2, w2 = img2.shape[:2]
        vis = np.zeros((max(h1, h2), w1+w2), np.uint8)
        vis[:h1, :w1] = img1
        vis[:h2, w1:w1+w2] = img2
        vis = cv2.cvtColor(vis, cv2.COLOR_GRAY2BGR)
    
        if H is not None:
            corners = np.float32([[0, 0], [w1, 0], [w1, h1], [0, h1]])
            corners = np.int32( cv2.perspectiveTransform(corners.reshape(1, -1, 2), H).reshape(-1, 2) + (w1, 0) )
            cv2.polylines(vis, [corners], True, (255, 255, 255))
    

     

     

     

×