У меня есть два изображения источника и фона, и я использую бесшовный клон opencv, чтобы смешать часть исходного изображения с фоновым изображением с помощью альфа-маски. Я удалил альфа-канал в источнике и фоне и преобразовал маску в оттенки серого ( только белый и черный). Однако функция бесшовного клонирования выдает ошибку, как показано ниже.
E / org.opencv.photo: photo :: seamlessClone_10 () перехватил std :: исключение: vector :: _ M_fill_insert
Я преобразовал все растровые изображения в mat, используя функцию opencv 'mattopbitmap' в java. Оба источника и фон имеют размер 513 * 513, а маска - 200 * 200 (с использованием opencv 3.4.1 в Android)
Imgproc.resize(mskmat, mskmat, new Size(200, 200));
Imgproc.resize(bgmat, bgmat, new Size(513, 513));
Imgproc.resize(imat, imat, new Size(513, 513));
Imgproc.cvtColor(bgmat, bgmat, Imgproc.COLOR_BGRA2BGR);
Imgproc.cvtColor(imat, imat, Imgproc.COLOR_BGRA2BGR);
Imgproc.cvtColor(mskmat, mskmat, Imgproc.COLOR_BGRA2GRAY);
Mat result = new Mat();
Photo.seamlessClone(imat, bgmat, mskmat, new org.opencv.core.Point(257, 257), result, Photo.NORMAL_CLONE);