Задать вопрос
@hardwellZero

Как наложить изображение на другое изображение(в центр)?

Привет!

Возникла задача наложить одно изображение на второе используя gocv.
Трудность в том, что нужно вычислить центр "бекграунд" изображения.
Что сейчас делаю я:

bgImg := gocv.IMRead("bg.jpg", gocv.IMReadColor)
inputImg := gocv.IMRead("input.jpg", gocv.IMReadColor)

bgHalfWidth := bgImg.Cols() / 2
bgHalfHeight := bgImg.Rows() / 2
imgHalfWidth := inputImg.Cols() / 2
imgHalfHeight := inputImg.Rows() / 2

minX := bgHalfWidth - imgHalfWidth
minY := bgHalfHeight - imgHalfHeight
maxX := bgHalfWidth + imgHalfWidth
maxY := bgHalfHeight + imgHalfHeight

rect := image.Rect(minX, minY, maxX, maxY)
roi := bgImg.Region(rect)
gocv.AddWeighted(roi, 0.0, bgImg, 1.0, 0.0, &roi)


Предположим, что входное изображение бекаграунда имеет следующие размеры 1024x682, а изображение которое нужно наложить 512x341. Для такого случая мы получим:
minx, miny, maxx, maxy равные 256, 171, 768, 511, но правильные - 256, 171, 768, 512.
Конечно же проблема в делении пополам и высчитывании, но увы я не могу понять как мне избавится от этого. В какой-то момент нужно сдвигать или расширять какое-то изображение? Возможно я просто выбрал не самый удачный подход к подсчетам minx, miny, maxx, maxy?

Буду рад услышать любые советы!
  • Вопрос задан
  • 177 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@U235U235
rect := image.Rect(minX, minY, maxX, maxY)
заменить на
rect := image.Rect(minX, minY, minX+inputImg.Cols(), minY+inputImg.Rows())
или тоже самое в расчете maxX/Y
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы