OpenCV图像色彩空间转换cvtColor,提取指定色彩范围区域 inRange

OpenCV图像色彩空间转换cvtColor,提取指定色彩范围区域 inRange_第1张图片

下图为:HSV色彩空间对应值:
OpenCV图像色彩空间转换cvtColor,提取指定色彩范围区域 inRange_第2张图片
生活中大多数看到的彩色图片都是RGB类型,但是在进行图像处理时,需要用到灰度图、HSV、HSI等颜色制式,opencv提供了cvtColor()函数来实现这些功能。

图像色彩空间转换cvtColor 函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间。

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0)

参数说明:

    src: 输入图像;
    dst: 输出图像;
    code: 颜色空间转换标识符;
    dstCn: 目标图像的通道数,该参数为0时,目标图像根据源图像的通道数和具体操作自动决定;

需要说明的是在opencv2.x时颜色空间转换code用的宏定义是CV_前缀开头,而在opencv3.x版本其颜色空间转换code宏定义更改为COLOR_开头,而经验证,2.4.13版本中opencv同时支持这两种形式的写法。故下面表格会将两种code类型同时列出,以供参考:
OpenCV图像色彩空间转换cvtColor,提取指定色彩范围区域 inRange_第3张图片

提取指定色彩范围区域 inRange()函数:

void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);
参数解释:

参数1:输入要处理的图像,可以为单通道或多通道。
参数2:包含下边界的数组或标量。
参数3:包含上边界数组或标量。
参数4:输出图像,与输入图像src 尺寸相同且为CV_8U 类型。
函数输出的dst是一幅二值化之后的图像。
//cvtColor()函数的作用是将一个图像从一个颜色空间转换到另一个颜色空间
//如果想把一个背景色彩单一的BGR图像,想抠图或做其他处理,首先把它转到一个色彩辨识度比较高的色彩空间去进行处理,比如HSV
void QuickDemo::inrange_demo(Mat &image){
	Mat hsv;  // HSV(色相,饱和度,明度)
	cvtColor(image,hsv,COLOR_BGR2HSV); //将BRG色彩空间的image图像  转化为 HSV色彩空间 的图像
	Mat mask;
	inRange(hsv,Scalar(35,43,46), Scalar(77,255,255),mask );//H绿色37—77,S绿色:43—255,V绿色:46-255,此处提取绿色,因为传入图片为绿色
	//inRange(hsv, Scalar(100, 43, 46), Scalar(124, 255, 255), mask);//H蓝色范围:100—124,蓝色范围::43—255,蓝色范围:46-255,此处蓝色mask,因为传入图片底色为蓝色

	Mat redback = Mat::zeros(image.size(), image.type());
	redback = Scalar(40, 40, 200);
	bitwise_not(mask, mask);//将inRange扣出的底色与人取反;目的下一步将人扣出来,换背景红色
	imshow("mask", mask);

	image.copyTo(redback,mask);
	imshow("roi区域提取", redback);
}

你可能感兴趣的:(openCV学习记录,opencv)