如何使用openCV将一帧中的黑色区域设置为另一帧的像素?

时间:2016-03-14 18:21:31

标签: c++ opencv image-processing

我正在尝试将一帧的黑色区域设置为另一帧中图像的值。您可以在下方看到两张图片。有没有办法用OpenCV中的图像替换黑色区域?

彩色图像

要合并的图片

修改 应用建议的方法后: Image after applying Miki's method

1 个答案:

答案 0 :(得分:2)

您可以使用copyTo并使用适当的面具。为此,您需要两个图像具有相同的大小。我在这里使用了resize,但您也可以选择合适的投资回报率。

为了获得掩码,我使用了inRange,因为它允许使用3个通道图像。您还可以转换为灰度(cvtColor(..., COLOR_BGR2GRAY))并使用threshold。结果是:

enter image description here

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    // Read images
    Mat3b img1 = imread("path_to_street_image");
    Mat3b img2 = imread("path_to_mask_image");

    // Must have equal size
    resize(img1, img1, img2.size());

    // Get the mask for black part
    Mat1b mask;
    inRange(img2, Scalar(0, 0, 0), Scalar(0,0,0), mask);

    // Copy img1 into img2, according to the mask
    img1.copyTo(img2, mask);

    // Show results
    imshow("Result", img2);
    waitKey();

    return 0;
}