代码之家  ›  专栏  ›  技术社区  ›  clarkk

如何absdiff()在cv_8uc1中使用遮罩的灰度图像

  •  0
  • clarkk  · 技术社区  · 7 年前

    invert_mask 是具有一些填充轮廓(像素值255)和 src 灰度级

    我想把面具下面的颜色颠倒过来 SRC

    输出图像几乎看起来是正确的,除了面具下的区域。它们只是黑色的。看起来只有白色变成黑色,但黑色仍然是黑色

    我不想把 SRC 因为在这之后我要对它做一些处理

    cv::absdiff(invert_mask, 255 - src, src);
    src = 255 - src;
    

    如果我这样做,白色将转换为黑色,但黑色/灰色不受影响

    cv::absdiff(invert_mask, src, src);
    

    SRC

    enter image description here

    反掩模

    enter image description here

    0 回复  |  直到 7 年前
        1
  •  0
  •   HansHirse    7 年前

    为了实现所需的颜色替换,下面使用简单阈值的简短代码片段应该可以做到这一点:

        cv::Mat src = cv::imread("src.png", cv::IMREAD_GRAYSCALE);
        cv::Mat invert_mask = cv::imread("invert_mask.png", cv::IMREAD_GRAYSCALE);
    
        cv::Mat textInMask = src.clone().mul(invert_mask / 255);
        cv::threshold(textInMask, textInMask, 200, 255, cv::THRESH_BINARY);
    
        cv::Mat output = src.clone() + invert_mask - textInMask;
    

    输出图像:

    enter image description here

    质量可能会提高,这只是基本概念。