【问题标题】:Loop through specified area of pixels循环遍历指定的像素区域
【发布时间】:2012-07-25 02:08:16
【问题描述】:

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

请看这张照片的例子:

左边的例子是我正在做的,收集所有像素。黑色和灰色占据了该选择的前 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
}

但我需要将其更改为从顶部和底部减少大约 5%,从侧面减少大约 8-10%,然后循环通过新选择。

我确实开始了,但后来停止了,因为我不确定我的计算是否返回奇数或像 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
    } 
} 

【问题讨论】:

  • 您可能需要考虑一种加权机制,而不是制作这样的盒子。图像中间的像素值 5 个像素,边缘附近的像素值 1/2 个像素,当您远离中间时会有一些渐变。您必须进行试验才能看到哪种渐变会给您带来好的结果。
  • 首先计算你想要切掉侧面和顶部的百分比 ($xSelectionChop = ($sizeX/100) * $xPercent;),然后在你的 for 循环中执行 for($x = $xSelectionChop; $x &lt; $sizeX - $xSelectionChop; $x += $granularity)?

标签: php loops


【解决方案1】:

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

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

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

黑白形式识别越准确,您就越能识别出您所看到的颜色对象。有关模式识别的详细信息,请阅读http://en.wikipedia.org/wiki/Pattern_recognition

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2013-07-16
    • 2011-12-06
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2012-11-23
    相关资源
    最近更新 更多