【问题标题】:OpenCV converting one color to anotherOpenCV将一种颜色转换为另一种颜色
【发布时间】:2013-08-15 05:32:06
【问题描述】:

我有一张灰度图像 我想将所有白色像素(纯白色 - 255)转换为黑色(0) 只有那些颜色,不是所有的灰度 我怎样才能做到这一点? 谢谢! 罗恩

【问题讨论】:

  • 将图像读入矩阵,循环遍历矩阵并检查 255 和 0 值并相应更新。

标签: c++ opencv colors


【解决方案1】:

您可以执行以下操作。

  1. 使用inRange() 为您的图像设置阈值。

    Mat image;  // your original image
    Mat mask;
    void inRange(image, Scalar(255), Scalar(255), mask)
    

    如果image 中的对应像素等于255,则输出mask 将是一个二进制掩码,其像素设置为255(即如果像素值介于255 和255 之间,则包括边界)。

  2. 使用copyTo()black_image(您想要的替代颜色)复制到原始imagemask

    Mat black_image(image.size(), CV_8U, Scalar(0));  // all zeros image
    black_image.copyTo(image, mask);
    

【讨论】:

  • inRange 的上限是独占 :-) 谢谢!
【解决方案2】:

使用 cvThreshold,在此处查看最后一种情况“阈值为零,倒置”:http://docs.opencv.org/doc/tutorials/imgproc/threshold/threshold.html

将阈值设置为 254,我认为这将解决您的问题。

【讨论】:

  • 这看起来像这样:cv::threshold(input, output, 254, 255, cv::THRESH_TOZERO_INV);