《opencv实用探索·十五》inRange二值化图像
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