opencv接口如下:

void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);

函数实现二值化功能,主要是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0)

参数1:输入要处理的图像,可以为单通道或多通道。
参数2:包含下边界的数组或标量。
参数3:包含上边界数组或标量。
参数4:输出图像,与输入图像src 尺寸相同且为CV_8U 类型。
请注意:该函数输出的dst是一幅二值化之后的图像。

单通道灰度图demo:

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat grayImage = cv::imread("gray_image.jpg", cv::IMREAD_GRAYSCALE);

    if (grayImage.empty()) {
        std::cerr << "Error: Could not read the image." << std::endl;
        return -1;
    }

    // 定义灰度范围(上限和下限都设置为相同的值,表示提取该灰度值)
    int lowerBound = 100;
    int upperBound = 200;

    // 创建输出图像
    cv::Mat binaryImage;

    // 应用灰度范围阈值
    cv::inRange(grayImage, lowerBound, upperBound, binaryImage);

    // 显示原图和二值图像
    cv::imshow("Original Image", grayImage);
    cv::imshow("Binary Image", binaryImage);

    cv::waitKey(0);
    return 0;
}

三通道图像demo:

#include <opencv2/opencv.hpp>

int main() {
    cv::Mat colorImage = cv::imread("color_image.jpg");

    if (colorImage.empty()) {
        std::cerr << "Error: Could not read the image." << std::endl;
        return -1;
    }

    // 定义颜色范围
    cv::Scalar lowerBound(100, 0, 0);  // BGR格式,最小值
    cv::Scalar upperBound(255, 50, 50);  // BGR格式,最大值

    // 创建输出图像
    cv::Mat binaryImage;

    // 应用颜色范围阈值
    cv::inRange(colorImage, lowerBound, upperBound, binaryImage);

    // 显示原图和二值图像
    cv::imshow("Original Image", colorImage);
    cv::imshow("Binary Image", binaryImage);

    cv::waitKey(0);
    return 0;
}

上面代码中注意点:
(1)opencv中三通道图像按BGR排列,不是RGB
(2)上面案例中B通道(100-255)范围设置1,G通道(0-50)范围设置1,R通道(0-50)范围设置1

《opencv实用探索·十五》inRange二值化图像-LMLPHP
12-12 00:24