使用mysql按主色搜索照片非常简单。假设照片中最主要颜色的r,g,b值已经存储在数据库中,这可以通过以下方式实现:
SELECT * FROM colors
WHERE ABS(dominant_r - :r) < :threshold
AND ABS(dominant_g - :g) < :threshold
AND ABS(dominant_b - :b) < :threshold
我想知道,如果无论如何可以在sphinx中存储颜色并使用sphinx搜索引擎执行查询?
谢谢!
答案 0 :(得分:1)
我用狮身人面像搜索了颜色。它在那里http://code.google.com/p/hppg/。这个怎么运作? 非常简单,对于每种颜色,我将其存储在数据库中的主色。数据库表,女巫用于sphinx索引,有一个名为“colors”的列,它的内容按以下方式填充:
/**
* This part was changed based on formula
*
* It fits here better than algorithm
*
* http://en.wikipedia.org/wiki/Tag_cloud
* 15400 is number of maximum matches based on indexed thumbnail size 120x130 px.
* */
$max = 15400;
$min = 25;
$rmax = 50;
$rmin = 1;
$colorIndex = array();
foreach ($colorsMaximumImage as $color)
{
$colorIndexString = trim(str_repeat(' pld'.$color['pallete_id'],round((($rmin*($color['count']-25))/($max-$min))*100)));
if ($colorIndexString != '')
$colorIndex[] = $colorIndexString;
}
我在这里使用了标记公式,以避免非常大的索引。 Count是自定义pallete项目匹配的次数。它工作得很好,可以在项目主页上找到一些实时网站的例子。这样我们可以同时按颜色和关键字搜索:)。目前我还在尝试获得最佳效果......