Вставить бинарное пороговое изображение (CV_8UC1) в область интереса цветного мата (CV_8UC4)?

У меня есть последовательность изображений типа CV_8UC4. Он имеет размер HD 1280x720. Я выполняю сегментацию bgfg (в частности, MOG2) на ROI изображения. После завершения алгоритма у меня есть двоичное изображение размера ROI и типа CV_8UC1. Я хочу вставить это двоичное изображение обратно в исходное большое изображение. Как я могу это сделать?

Вот что я делаю (код упрощен для удобства чтения):

// cvImage is the big Mat coming from outside
cv::Mat roi(cvImage, cv::Rect(200, 200, 400, 400));
mog2 = cv::createBackgroundSubtractorMOG2();
cv::Mat fgMask;
mog2->apply(roi, fgMask); // Here the fgMask is the binary mat which corresponds to the roi size

Итак, как можно вставить fgMask обратно в исходное изображение? Как сделать это преобразование CV_8UC1 -> CV_8UC4 только для рентабельности инвестиций?

Спасибо.


person Grigory    schedule 04.10.2015    source источник


Ответы (1)


Вам нужно сделать fgMask 4-канальное изображение:

Mat4b fgMask4ch;
cvtColor(fgMask, fgMask4ch, COLOR_GRAY2BGRA);

а затем скопируйте это в исходный cvImage в правильную позицию, заданную roi:

fgMask4ch.copyTo(roi);
person Miki    schedule 04.10.2015