@AnandSonawane также есть класс сшивания изображений в OpenCV, который выполняет смешивание.
отал над проектом, в котором я собираю вместе изображения беспилотника, летящего в газонокосилке. Я могу сшивать изображения из одного прохода (благодаря многим ответам на stackoverflow), но когда я пытаюсь сшить два отдельных прохода вместе в поперечном направлении, преобразование, которое производит мой метод, является бессмысленным. Вот два изображения, которые я пытаюсь сшить:
И вот код, который я использовал, чтобы оценить гомографию между ними,base
а такжеcurr
.
base_gray = cv2.cvtColor(base, cv2.COLOR_BGRA2GRAY)
curr_gray = cv2.cvtColor(curr, cv2.COLOR_BGRA2GRAY)
detector = cv2.ORB_create()
base_keys, base_desc = detector.detectAndCompute(base_gray, None)
curr_keys, curr_desc = detector.detectAndCompute(curr_gray, None)
FLANN_INDEX_LSH = 6
flann_params = dict(algorithm = FLANN_INDEX_LSH,
table_number = 12,
key_size = 20,
multi_probe_level = 2)
search_params = dict(checks=100)
matcher = cv2.FlannBasedMatcher(flann_params, search_params)
matches = matcher.match(base_desc, curr_desc)
max_dist = 0.0
min_dist = 100.0
for match in matches:
dist = match.distance
min_dist = dist if dist < min_dist else min_dist
max_dist = dist if dist > max_dist else max_dist
good_matches = [match for match in matches if match.distance <= 10 * min_dist ]
base_matches = []
curr_matches = []
for match in good_matches:
base_matches.append(base_keys[match.queryIdx].pt)
curr_matches.append(curr_keys[match.trainIdx].pt)
bm_final = np.asarray(base_matches)
cm_final = np.asarray(curr_matches)
# find perspective transformation using the arrays of corresponding points
transformation, hom_stati = cv2.findHomography(cm_final, bm_final, method=cv2.RANSAC, ransacReprojThreshold=1)
Как я уже сказал, это не работает. Это потому, что прозрачные фоны мешают с расчетами?