Автоматически переводить изображения, чтобы они соответствовали позиции объекта - PullRequest
0 голосов
/ 30 мая 2020

Допустим, у вас есть различные изображения, как показано ниже.

Есть ли в Python OpenCV функция для автоматического перевода изображения по горизонтали, чтобы основной объект имел примерно такое же положение, что и на эталонном изображении (первое изображение)?

В математических выражениях это будет просто вычисление:

score[x] = image_correlation(ref_image, image2.translate_horizontally(x))

для всех возможных x in range(-200,200) (если ширина изображения 200)

и взять x, которое максимизирует эта оценка.

Перед тем, как переделать это с нуля, эта функция уже присутствует в OpenCV?

(Использование центра масс изображений? другие методы с использованием image_correlation функция уже присутствует в OpenCV? Или Масштабирование инвариантного преобразования функций методы?)


Пример:

эталонное изображение:

enter image description here

image2:

enter image description here -> автоматически переводится в -> enter image description here

1 Ответ

0 голосов
/ 30 мая 2020

Я, наконец, решил это довольно легко: вы должны предоставить ссылку на фон (только с зеленым фоном в моем случае) ref.png.

Тогда вычитание фона + центр масс работает хорошо:

import cv2
import scipy.ndimage as ndi 

backSub = cv2.createBackgroundSubtractorMOG2()  # or backSub = cv.createBackgroundSubtractorKNN()

frame = cv2.imread('ref.png')
backSub.apply(frame)
frame = cv2.imread('1.png')
mask = backSub.apply(frame)
cv2.imwrite('mask.png', mask)
print(ndi.center_of_mass(mask))

Результат: (63.6349484521314, 164.158143799214)

Затем мы можем сравнить этот центр масс для последовательных кадров и выполнить соответствующий перевод.

enter image description here

...