как объединить (сшить) 2 изображения без черных точек в opencv c++

У меня есть 2 изображения, и когда я их сшиваю, на полученном изображении будет черная область. Я поделюсь изображениями. так как я могу их прошить без черной области?

У меня есть матрица гомографии, и я сшиваю их с помощью ROI.

Но у меня есть поиск о «бесшовном клонировании» в OpenCV, но я еще не знаю, что это мне поможет. Мне нужен совет.

Я хочу так: введите здесь описание изображения

https://www.harrisgeospatial.com/docs/html/images/Mosaic/DiagramUpdateFootprints.png


person hede    schedule 17.09.2019    source источник
comment
не перезаписывать во время деформации, а записывать в отдельное изображение и затем объединять, например. не копируя черные пиксели   -  person Micka    schedule 17.09.2019
comment
@ Мика, я не понял. У меня есть эти изображения. как их объединить без черных пикселей?   -  person hede    schedule 17.09.2019
comment
взгляните на: stackoverflow.com/questions/22315904/   -  person Micka    schedule 17.09.2019
comment
@Micka, конечно, надеюсь, это будет полезно   -  person hede    schedule 17.09.2019


Ответы (1)


Если вам не нужна смесь:

псевдокод:

inputs: image A, image B, backgroundColorRange X
outputs: image O

for each pixel in the output image:
    if(pixel(A) == X AND pixel(B) == X) pixel(O) = X;
    else if (pixel(A != X) AND pixel(B == X) pixel(O) = pixel(A);
    else if (pixel(A == X) AND pixel(B == X) pixel(O) = pixel(B);
    else if (pixel(A != X) AND pixel(B != X) pixel(O) = 0.5*pixel(A) + 0.5*pixel(B)
person Micka    schedule 17.09.2019
comment
это не решение. Он работает очень медленно. и вы должны дать мне лучшее решение :) - person hede; 17.09.2019
comment
создавайте маски и используйте функции opencv .setTo, .copyTo и .addWeighted для работы с 4 различными отдельными областями маски. Идея остается прежней. - person Micka; 17.09.2019
comment
как насчет blend::seamlessBlend(first, second, mask, result); - person hede; 17.09.2019