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

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(白色)。

在这里插入图片描述
如图所示: 这个锥体的高表示亮度,越往上越亮,取值范围【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)
在这里插入图片描述

改变颜色空间 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);
}

在这里插入图片描述

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值