循环通过指定的像素区域

时间:2012-07-26 13:15:08

标签: php loops

我在照片网站上通过颜色功能进行了搜索。为此,我循环浏览了一个图像中的所有像素,并在我的数据库中记录了前十个像素。我的问题是,因为我的照片有人物,我的搜索者真的搜索主题的颜色,而不是背景(天空,铺路,草等)。我知道这将很难完全消除,但我认为我需要稍微改变颜色以获得更好的效果。

请看一张照片的例子:

enter image description here

左边的例子是我正在做的,收集所有像素。在这个选择中,黑色和灰色占据了前3种颜色,粉红色的色调是第4,背景女孩的连衣裙的海军蓝是第5 - 我只收集了前5种颜色,我的主色并没有真正排名那么好。如果我可以改变循环像素的方式,只选择绿色框中的颜色(右),我认为它会在我的收藏中略有不同。这是我努力看到数学的地方。

我这样做是为了遍历所有像素:

$size = @getimagesize($imageFile); 

for ($x = 0; $x < $size[0]; $x += $granularity) { 
  for($y = 0; $y < $size[1]; $y += $granularity) { 
    // do stuff here
}

但我需要改变这一点,从顶部和底部以及大约8-10%的边缘大约减少5%,然后循环选择新的。

我确实开始这个但后来因为我不确定我的计算返回奇数或数字如1.030044858。

这是我走了多远,并希望有人可以帮助清理它并让我上线:

$granularity = 4;
$granularity = max(1, abs((int)$granularity));

$size = @getimagesize($imageFile);
$sizeX = $size[0];
$sizeY = $size[1];

$xPerCent = 8; // for me to set & adjust
$yPerCent = 5; // for me to set & adjust

$xSelectionWidth = ($sizeX/100)  * $xPerCent;
$xSelectionWidth = $sizeX - ($xSelectionWidth * 2);

$xSelectionHeight = ($sizeY/100)  * $yPerCent;
$xSelectionHeight = $sizeY - ($ySelectionHeight * 2);

$xSelectionStart = 0;
$xSelectionEnd = 0;
$ySelectionStart = 0;
$ySelectionEnd = 0;

for($x = 0; $x < $size[0]; $x += $granularity) { 
    for($y = 0; $y < $size[1]; $y += $granularity) { 
        // do stuff here
    } 
} 

1 个答案:

答案 0 :(得分:0)

如果您想忽略图片中的某些内容,我建议您将其转换为B&amp; W并采取最大的白色区域(您需要设置转换的详细信息,以确保您不会将所有非白色区域设置为白色颜色为黑色)。

我指的是红色,肤色应设为白色,紫色为黑色。在这种情况下,背景和任何黑色表面都是黑色的。阅读http://www.switchonthecode.com/tutorials/csharp-tutorial-convert-a-color-image-to-grayscale这是一个很棒的介绍,但是,我说的是真正的黑白,所以你可以调整/改编这个。

这将极大地帮助您将注意力集中在图像的正确部分。

B&amp; W形式识别越准确,您就能越好地识别您所拍摄的色彩。有关模式识别的详细信息,请阅读http://en.wikipedia.org/wiki/Pattern_recognition

获取您想要在原始图像中查看的坐标集。

Sory我不是一个PHP人,我不能用这种方式更具体,但是,我希望这会对你有帮助......