void inRange(InputArray src, InputArray lowerb,
InputArray upperb, OutputArray dst);
inRange函数对于图像数据来说,将像素值满足在[lowerb,upperb]区间内的像素点置为255,区间外的置为0,生成一张与src同大小的二值化的单通道图像。
void copyTo( OutputArray m, InputArray mask )
image.copyTo(b,mask);
拷贝图像image在掩膜非0位置的像素点到b中。
一个小程序,将下图1中的月亮单独扣出来。
图1 image
void OpencvExample::Example_CvtROI(Mat &image)
{
Mat dst, hsv, mask;
vector<Mat>mv;
//转换至hsv空间
cvtColor(image, hsv, COLOR_BGR2HSV);
imshow("hsv", hsv);
//根据表1把蓝色背景分割出来得到背景mask
inRange(hsv,Scalar(100,43,43),Scalar(124,255,255),mask);
imshow("mask",mask);
//创建一个全黑的图用来存放roi
Mat roi = Mat::zeros(image.size(), image.type());
//对mask取反,得到roi区域的mask
bitwise_not(mask, mask);
imshow("mask-not",mask);
//复制得到roi区域图像
image.copyTo(roi,mask);
imshow("roi", roi);
}
图2 程序运行中间图
表1 常见颜色在hsv空间中各通道值的区间范围