Я пытаюсь нарисовать 3D-куб на отслеживаемом объекте (используя ORB и гомографию объекта) - opencv Python - PullRequest
0 голосов
/ 12 сентября 2018

Сейчас я просто могу нарисовать квадрат (или что-то еще) вокруг отслеживаемого объекта, что-то вроде этого: Что я могу сделать сейчас Но я пытаюсь сделать это на любомтекстурированный объект: Что я хочу сделать, но на любом текстурированном объекте

Это часть моего кода, я планирую использовать гомографию для рисования.Извините за мой английский.

while(True):
ret, frame = cap.read(0)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
orb = cv2.ORB_create(nfeatures=500)

kp1, des1 = orb.detectAndCompute(img1, None)
kp2, des2 = orb.detectAndCompute(frame, None)
matcher = cv2.DescriptorMatcher_create(cv2.DESCRIPTOR_MATCHER_BRUTEFORCE_HAMMING)
matches = matcher.match(des1, des2, None)

matches.sort(key=lambda x: x.distance, reverse=False)

numGoodMatches = int(len(matches) * GOOD_MATCH_PERCENT)
matches = matches[:numGoodMatches]
points1 = np.zeros((len(matches), 2), dtype=np.float32)
points2 = np.zeros((len(matches), 2), dtype=np.float32)

for i, match in enumerate(matches):
    points1[i, :] = kp1[match.queryIdx].pt
    points2[i, :] = kp2[match.trainIdx].pt
M, mask = cv2.findHomography(points1, points2, cv2.RANSAC)
h, w = img1.shape[:2]
pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
dst = cv2.perspectiveTransform(pts, M)
pts = [np.int32(dst)]

frame = cv2.polylines(frame, pts, True, (255,0,255), 1, cv2.LINE_AA)

1 Ответ

0 голосов
/ 18 сентября 2018

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

матрица вращения и перевода из гомографии opencv

...