如何在CV_8UC1中使用蒙版absdiff()灰度图像

时间:2019-03-26 08:27:03

标签: c++ opencv

invert_mask是CV_8UC1,具有填充的轮廓(像素值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

invert_mask

enter image description here

1 个答案:

答案 0 :(得分:0)

要实现所需的颜色替换,以下使用简单阈值处理的简短代码段应该可以解决问题:

    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

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