您的位置首页生活百科

如何用hsv来判定某个像素的颜色

如何用hsv来判定某个像素的颜色

的有关信息介绍如下:

如何用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、占比计算和输出。