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
