【1】inRange()函数
OpenCV中的inRange()函数可实现二值化功能(这点类似threshold()函数),更关键的是可以同时针对多通道进行操作,使用起来非常方便!主要是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0),该功能类似于之间所讲的双阈值化操作。
函数原型(C++):
void inRange(InputArray src, InputArray lowerb,InputArray upperb, OutputArray dst);
官方文档中的解释:Checks if array elements lie between the elements of two other arrays.即检查数组元素是否在另外两个数组元素值之间。这里的数组通常也就是矩阵Mat或向量。请注意:该函数输出的dst是一幅二值化之后的图像。
参数解释:
参数1:输入要处理的图像,可以为单通道或多通道。
参数2:包含下边界的数组或标量。
参数3:包含上边界数组或标量。
参数4:输出图像,与输入图像src 尺寸相同且为CV_8U 类型。
【2】HSV色彩空间的颜色
void QuickDemo::inrange_demo(Mat &image) {
Mat hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
Mat mask;
inRange(hsv, Scalar(35,43,46), Scalar(77,255,255), mask);//绿色的HSV范围
Mat redback = Mat::zeros(image.size(), image.type());
redback = Scalar(0,0,255);
bitwise_not(mask,mask);//对mask掩膜进行取反
imshow("mask",mask);
image.copyTo(redback,mask);//将mask拷贝到redback
imshow("roi区域提取", redback);
}
效果图: