【问题标题】:PHP (?): Determing a photo's colour, ignoring the backgroundPHP(?):确定照片的颜色,忽略背景
【发布时间】:2013-05-13 08:05:34
【问题描述】:

我不知道在这里使用的最佳技术是什么,我知道 PHP 可以做一些类似的事情,但如果我错了,我会指出正确的方向。

我正在建立一个在线商店,我想要一种简单(自动)的方法来对每件待售商品的颜色进行分类。

我在 Stack 上看到了很多与此相关的帖子,这里有一些很好的讨论供感兴趣的人讨论:

Programmatically determine human readable colours

Get Image Colour

Detect overall average colour of a picture

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

如您所见,对于图片 #1,平均颜色将比产品颜色白很多; #2 和 #3 的颜色会更深。

谁能想到我可以使用任何方法来获得正确的平均颜色,以自动方式,使用 PHP、Ruby、Python 或类似的东西?我的想法是从每张照片的中间(通常是有问题的产品所在的位置)截取一部分,然后取其平均值。例如,在图像中心获取一个 30px x 30px 的正方形并对其进行处理。

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

【问题讨论】:

  • PHP 有一个叫imagecolorat 的东西,你可以找到here
  • @Daniel 是的,当我说我的想法是从图像中间取一个正方形部分并对其进行分析时,这就是我所指的。您是否同意这是获得足够接近图像颜色的最佳方法?
  • 检查 github 上的 99designs repo,他们有脚本。
  • @Jascination - 我想设置一个区域来扫描图像并将结果添加到数组中。我不能说这是方法,因为我从未使用过它,但这是我要走的路。在完善课程类别时,您需要考虑一些事项。

标签: php image image-processing imagemagick


【解决方案1】:

这是一项艰巨的任务。

我的建议是你可能会使用更多的输入 一张图片只有背景(没有对象),一张有对象。 现在,如果您对减法设置阈值,您可以获得对象像素。 (我的意思是只取那些在两张照片之间变化的人) 使用这些像素,您可以获取直方图并选择最常见的。

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

【讨论】:

    【解决方案2】:

    我建议你把图片炸开,让图片的中心有重量。

    convert image_source.jpg -implode -32 image_destination.jpg
    

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

    如果您需要更高的精度,则需要一种计算机视觉算法来分离前景和背景;你可以看看OpenCV

    【讨论】:

    • 对不起,伙计,我不太精通 PHP,文档也没有真正帮助 - 你能详细说明 -implode-32 在做什么吗?
    • 这是一种重视中心像素的方法;类似于鱼眼镜头的效果。请参阅 ImageMagick 示例:imagemagick.org/Usage/warping/#explode
    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 1970-01-01
    • 2015-02-20
    • 2012-10-24
    • 2023-03-26
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多