如何用hsv来判定某个像素的颜色
的有关信息介绍如下:
HSV是根据颜色的直观特性色调H、饱和度S、明度V。H的取值范围为0~360度,S和V的取值范围为0~1。可用这三个值来表示自然界任何颜色。
1、相比与RGB识别颜色,HSV颜色识别的准确度更高,HSV中对颜色的掌控只有H这个值,所以当H的区间定了,该颜色基本就定了。以下为对各种颜色判断HSV的区间。
在计算机识别颜色上,将H取值为(0,180°);S为(0,255);V为(0,255)
2、在C++中,可以用
scalar.val 表示H
scalar.val 表示S
scalar.val 表示V
3、对颜色的判定可以如下所示:
if ((scalar.val >= 0 && scalar.val <= 180)
&& (scalar.val >= 0 && scalar.val <= 255)
&& (scalar.val >= 0 && scalar.val <= 46)){
numblack++;//黑色判定
}
else if ((scalar.val >= 0 && scalar.val <= 180)
&& (scalar.val >= 0 && scalar.val <= 43)
&& (scalar.val >= 46 && scalar.val <= 220)){
numgrey++;//灰色判定
}
else if ((scalar.val >= 0 && scalar.val <= 180)
&& (scalar.val >= 0 && scalar.val <= 30)
&& (scalar.val >= 221 && scalar.val <= 255)){
numwhite++;//白色判定
}
else if (((scalar.val >= 0 && scalar.val <= 10) || (scalar.val >= 156 && scalar.val <= 180))
&& (scalar.val >= 43 && scalar.val <= 255)
&& (scalar.val >= 46 && scalar.val <= 255)){
numred++;//红色判定
}
else if ((scalar.val >= 26 && scalar.val <= 34)
&& (scalar.val >= 43 && scalar.val <= 255)
&& (scalar.val >= 46 && scalar.val <= 255)){
numyellow++;//黄色判定
}
else if ((scalar.val >= 100 && scalar.val <= 124)
&& (scalar.val >= 43 && scalar.val <= 255)
&& (scalar.val >= 46 && scalar.val <= 255)){
numblue++;//蓝色判定
}
4、首先遍历整个图像的像素点,然后对每一个像素点进行HSV提取,对该像素点颜色进行判定,判定为某种颜色,该颜色+1,直到全部像素点判定完成,也就知道该颜色的数目,
该颜色数目/总像素数目=该颜色在这图片上的占比。
5、占比计算和输出。



