将二进制阈值图像 (CV_8UC1) 插入彩色垫子 (CV_8UC4) 的 ROI 中?

Insert binary threshold image (CV_8UC1) into a ROI of a coloured mat (CV_8UC4)?

我有一系列 CV_8UC4 类型的图像。它的高清尺寸为 1280x720。 我正在对图像的 ROI 执行 bgfg 分割(特别是 MOG2)。 算法完成后,我得到了 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插入回原图呢? 如何仅针对 ROI 执行此 CV_8UC1 -> CV_8UC4 转换?

谢谢。

您需要制作 fgMask 4 通道图像:

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

然后将其复制到原cvImage的正确位置,由roi:

给出
fgMask4ch.copyTo(roi);