可以将html十六进制颜色分类为简单的字符串值吗??
例如,颜色# can 3333,它不是完全红色,但作为一个人,我们可以假设它是红色的。颜色#CCCCCC可以归类为白色,因为我不想涉及黑色或灰色。
可能的简单值至少包括:
更多的分类更好,但我至少要这些颜色。
能办到吗?
可选信息:
我正在创建一个通过网络摄像头捕捉图片的网络应用程序。用户可以拿着一张白色或红色的纸到摄像头上,应用程序就能检测到图像的主要颜色。然后,用户将被重定向到不同的选项,取决于他们的颜色。我已经做了颜色检测,但我只想把它分类为几种颜色,红色、白色和绿色。
发布于 2011-12-13 14:26:09
这是一个有点主观的问题,因为它是可以做到的,但你会怎样做将取决于你的具体应用-颜色本身是非常主观的方式,它是由个人观察。
首先,您需要将字符串拆分为红色、绿色和蓝色组件:
$colourId = 'CC3333';
list($red, $green, $blue) = str_split($colourId, 2);那么,将它们转换为整数可能是一种想法:
$red = hexdec($red);
$green = hexdec($green);
$blue = hexdec($blue);然后,您需要对其应用某种逻辑,以确定它属于哪个类。你如何做这件事真的取决于你自己,但也许你可以这样做:
if (max($red, $green, $blue) - min($red, $green, $blue) < 10) {
// If the values are all within a range of 10, we'll call it white
$class = 'white';
} else if (max($red, $green, $blue) == $red) {
// If red is the strongest, call it red
$class = 'red';
} else if (max($red, $green, $blue) == $green) {
// If green is the strongest, call it green
$class = 'green';
} else if (max($red, $green, $blue) == $blue) {
// If blue is the strongest, call it blue
$class = 'blue';
}发布于 2011-12-13 14:21:46
在RGB模型中很难对颜色进行分类,最好将颜色转换为HSL或HSV模型,然后再对颜色进行分类。有关更多信息,您可以查看模型
发布于 2011-12-13 14:31:18
您首先需要将十六进制格式转换为rgb值。一个简单的谷歌搜索出现了此页。我还没有对它进行测试,但如果它不能正常工作,那么我相信您可以找到一个不同的测试。
一旦您有rgb值,您需要定义您的颜色范围。以下代码在每隔63.75个时间内创建颜色范围(即每种颜色4个范围,因此4*4*4 =64个总范围):
function findColorRange($colorArray){
//assume $colorArray has the format [r,g,b], where r, g, and b are numbers in the range 0 - 255
for($i = 0; $i < 256; $i += 51){ //find red range first
if($colorArray[0] <= $i + 51/2 && $colorArray[0] >= $i - 51/2){
for($n = 51; $n < 256; $n += 51){ //green
if($colorArray[1] <= $n + 51/2 && $colorArray[1] >= $n - 51/2){
for($z = 51; $z < 256; $z += 51){ //blue
if($colorArray[2] <= $z + 51/2 && $colorArray[2] >= $z - 51/2){
return array($i,$n,$z);
}
}
}
}
}
}
}上面的函数将返回一个数组,该数组定义所述颜色的颜色范围。在那里,您可以将可能的范围映射到您想要的任何字符串。这很可能是通过创建一个关联数组来实现的,其中键是r,g,b值,值是字符串。例如:
$colorMap = array(
'0,0,0' => 'white',
'51,0,0' => 'light gray'
)https://stackoverflow.com/questions/8490602
复制相似问题