1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > opencv HSV色彩空间 追踪特定颜色

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

时间:2023-10-22 09:03:27

相关推荐

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

如图所示: 这个锥体的高表示亮度,越往上越亮,取值范围【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

@codeimg *= 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);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。