opencv HSV色彩空间 追踪特定颜色

文章目录

    • HSV颜色模型
    • opencv 的 HSV颜色分量范围
    • 改变颜色空间 cvtColor()
    • 对象追踪 inRange()
    • DEMO

HSV颜色模型

HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。、这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。

色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;

饱和度S:取值范围为0.0~1.0;

亮度V:取值范围为0.0(黑色)~1.0(白色)。

opencv HSV色彩空间 追踪特定颜色_第1张图片
如图所示: 这个锥体的高表示亮度,越往上越亮,取值范围【0,1】;
中心到边缘的距离表示饱和度,越靠边饱和度越大,取值范围【0,1】;
旋转角度表示的是色调,范围【0,360】;

opencv 的 HSV颜色分量范围

opencv 在上面的范围基础上进行了转化。

H: 0— 180 (即H = H / 2)
S: 0— 255 (即S = S * 255)
V: 0— 255 (即V = V * 255)
opencv HSV色彩空间 追踪特定颜色_第2张图片

改变颜色空间 cvtColor()

OpenCV中有超过150种颜色空间转换方法。最广泛使用的,BGR↔灰色和BGR↔HSV。

对于颜色转换,我们使用cv函数。cvtColor()

CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
@param src 		//输入图像:8位无符号,16位无符号(CV_16UC ...)或单精度浮点数。
@param dst 		//输出图像的大小和深度与src相同。
@param code 	//颜色空间转换代码(请参见#ColorConversionCodes)。
@param dstCn 	//目标图像中的通道数;如果参数为0,则通道是自动从src和代码派生的。

对于BGR→灰度转换,我们使用标志cv::COLOR_BGR2GRAY。
对于BGR→HSV,我们使用标志cv::COLOR_BGR2HSV。

如果将#cvtColor用于8bit图像,转换会损失一些信息。建议先转化为CV_32F

@code
    img *= 1./255;
    cvtColor(img, img, COLOR_BGR2Luv);
@endcode

对象追踪 inRange()

现在我们知道了如何将BGR图像转换成HSV,我们可以使用它来提取一个有颜色的对象。在HSV中比在BGR颜色空间中更容易表示颜色。下面我们将尝试提取图片中红色部分。
方法如下:

  • 转换从BGR到HSV颜色空间 -
  • 我们对HSV图像设置红色范围的阈值 -
CV_EXPORTS_W void inRange(InputArray src, InputArray lowerb,
                          InputArray upperb, OutputArray dst);
@param src 		//输入数组。
@param lowerb	//包括下边界数组或标量。
@param upperb	//包含上边界数组或标量。
@param dst		//输出数组,其大小与src相同,类型为CV_8U,单通道。

DEMO

int main() {
     
   cv::namedWindow("src",0);
   cv::namedWindow("dst", 0);
   cv::Mat src = cv::imread("./img/test1.jpg", 1);
   cv::Mat dst,dst1,hsv;
   cv::cvtColor(src, hsv, cv::COLOR_BGR2HSV);
   cv::inRange(hsv, cv::Scalar(0, 43, 46), cv::Scalar(10, 255, 255),dst);
   cv::inRange(hsv, cv::Scalar(156, 43, 46), cv::Scalar(180, 255, 255), dst1);
   dst = dst + dst1;
   cv::imshow("src", src);
   cv::imshow("dst", dst);
   cv::waitKey(0);
}

opencv HSV色彩空间 追踪特定颜色_第3张图片

你可能感兴趣的:(opencv,opencv,计算机视觉)