@ShamiLLL

Как накладывать изображения в python?

Здравствуйте, интересует вопрос про наложение изображений. Есть два одинаковых изображения 1 и 2 (разных форматов), на 2-м изображении что-то наложено. Как можно наложить изображение 2 на первое так, чтобы получить эффект того, что у нас есть просто одно целое изображение, т.е. чтобы все элементы второго изображения (естественно, кроме того, что наложено на второе изображение) находились соответственно этим же элементам первого изображения? Интересует работа в питоне с библиотекой opencv. Заранее спасибо
  • Вопрос задан
  • 706 просмотров
Пригласить эксперта
Ответы на вопрос 2
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Здесь обычная работа с RGB-компонентами каждого из изображений проходя по каждому пикселю (i,j).
Важно учесть размеры, чтобы они совпадали.
Для наложения надо ввести аналоги альфа-компоненты (A) для каждого изображения, чтобы их сумма была равна 1.
Тогда, если у нас есть изображения a, b и результат c, то для каждого пикселя и цветовой компоненты надо вычислять
Rc = Ra*Aa + Rb * Ab; то же самое для G и B:
Gc = Ga*Aa + Gb * Ab
Bc = Ba*Aa + Bb * Ab
где Aa + Ab = 1
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Т.е. если переформулировать вопрос:
Есть два изображения (A и B) с одинаковым набором маркеров. Нужно трансформировать изображение B так, чтобы его маркеры совпали по положению с маркерами изображения A, а потом наложить результат на изображение A.
Я так понял?

Если да, то это делается примерно так.
1. Формируешь два массива координат - маркеры на изображениях A и B. Как - зависит от типа маркеров, но порядок должен быть одинаковым в обоих массивах. Форма (shape) массивов должна быть (N, 1, 2), где последний индекс отвечает за x или y координату, а N - число маркеров.
2. Вызываешь
homography, ptmask = cv2.findHomography(arrayB, arrayA, cv2.RANSAC)
.
homography будет матрицей проективного преобразования - как повернуть маркеры B, чтобы они легли на маркеры A. ptmask будет содержать сведения о том, какие пары точек удалось совместить.
3. Делаешь вызов cv2.warpPerspective(), чтобы повернуть изображение B согласно матрице homography. Параметр размера должен быть таким чтобы второе изображение точно уместилось вместе с первым. Например, можно заранее создать большое изображение по размеру.
4. Делаешь совмещение. Используешь cv2.PerspectiveTransform(), чтобы понять, где на итоговом изображении будут углы изображения B, делаешь cv2.fillPoly() чтобы создать бинарную маску для наложения. В маске белый пиксель будет означать "сюда поместить пиксель из повернутого B", а черный - "оставить пиксель как есть". Используешь эту маску, чтобы выполнить наложение.

Пример кода и исходных данных - не совсем то, что тебе нужно, но идею передаст, я надеюсь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы