Привет!
Возникла задача наложить одно изображение на второе используя 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?
Буду рад услышать любые советы!