2013-05-18 49 views
2

我不知道什么是最好的技术,这里使用的,我知道PHP可以做隐约类似的事情,但我指出正确的方向,如果我错了。PHP(?):Determing照片的颜色,忽略背景

我建立一个网上商店,我想一个简单的(自动)的方式来分类,每件商品的颜色可以转让。

我已经看到了许多栈的帖子这都与此有关,这里是为那些有兴趣的一些良好的讨论:

Programmatically determine human readable colours

Get Image Colour

Detect overall average colour of a picture

这些都是很好好的。但是,我的问题有点不同。所讨论的图像全都在不同的彩色背景上,并且这些图像会影响图像的“平均颜色”。我已经尝试将图像大小调整为1px以获得平均颜色,但这并不奏效。

Pants

Keys

Tie

正如你所看到的,对于图像#1的平均颜色将是比产品颜色更白了不少;对于#2和#3,它会变得更加棕色。

任何人都可以想到的任何方法,我可以用它来得到正确的平均颜色,以自动化的方式,用PHP和Ruby,Python或任何类似?我的想法是从每张照片的中间(通常是所讨论的产品的位置)中选取一部分并取其平均值。例如,在图像中心获取30px x 30px的正方形并处理该图像。

这会不会是绝对完美的,虽然,我完全新的这种编程 - 有没有更好的办法来确定前景色?

+1

PHP有一些所谓的'imagecolorat',你可以找到[这里](http://www.php.net/manual/en/function.imagecolorat.php) – Daniel

+0

@Daniel没错,当我说我的想法是从图像中间取一个方形截面并对其进行分析时,这就是我所指的。你是否同意这是获得关于图像颜色的足够接近概念的最佳方法? – Jascination

+0

检查github上的99designs回购,他们有脚本forthat。 – mpm

回答

1

我建议你爆炸图像,给图像的中心赋予重量。

convert image_source.jpg -implode -32 image_destination.jpg 

然后计算平均颜色(通过缩放到1x1)或从居中框中选择一个平均值。

如果您需要更精确,你需要一个计算机视觉算法,以分隔从背景的前景;你可以看看OpenCV

+0

对不起伙伴我对PHP不太了解,而且这些文档并没有真正帮助 - 你能详细说明'-implode'和'-32'在做什么吗? – Jascination

+0

这是一种重视中心像素的方法;类似于鱼眼镜头的效果。请参阅ImageMagick示例:http://www.imagemagick.org/Usage/warping/#explode –

0

这是一个相当艰巨的任务你的达。

我的建议是,你可能会使用相当多的输入 一张图片只有背景(没有对象)和一个与对象。 现在,如果阈值减法可以获得对象像素。 (我只是采取两个图片之间的变化) 使用这些像素,你可以采取直方图,并选择最常见的。

http://php.net/manual/en/imagick.getimagehistogram.php