За последние 24 часа нас посетили 17636 программистов и 1595 роботов. Сейчас ищут 1346 программистов ...

Найти пиксель с заданным цветом

Тема в разделе "Обработка изображений средствами PHP", создана пользователем KYIVSTAR, 9 май 2012.

  1. KYIVSTAR

    KYIVSTAR Активный пользователь

    С нами с:
    9 май 2012
    Сообщения:
    12
    Симпатии:
    0
    Есть картинка. Как вычислить координаты оранжевого шарика? RGP цвет: 246 145 28

    [​IMG]
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    1. Поискать в инете.
    2. Почитать что-нибудь о библиотеке GD, найти функцию imagecolorat.
    3. Написать свою функцию по поиску вроде такой
    Код (PHP):
    1. <?php
    2. $image=imageCreateFromPng('img.png');
    3. $imageSize=getimagesize('img.png');
    4.  
    5. $sr=246;//найти (246,145,28)
    6. $sg=145;
    7. $sb=28;
    8. $dif=2;//точность: чем меньше, тем точней
    9. echo sprintf('Цвет (%d, %d, %d) с точностью %.2f%% найден в координатах:%s',$sr,$sg,$sb,(100/256*$dif),"<br/>\n");
    10. for($x=0;$x<$imageSize[0];$x++){
    11.     for($y=0;$y<$imageSize[1];$y++){
    12.         $color=imagecolorat($image,$x,$y);//цвет пикселя в координате
    13.         $r=($color>>16) & 0xFF;
    14.         $g=($color>>8) & 0xFF;
    15.         $b=$color & 0xFF;
    16.         if($sr+$dif>=$r && $sr-$dif<=$r && $sg+$dif>=$g && $sg-$dif<=$g && $sb+$dif>=$b && $sb-$dif<=$b){
    17.             echo sprintf('%d %d<br/>',$x,$y);
    18.         }
    19.     }
    20. }
    21. imageDestroy($image); 
    4. По найденным координатам цвета найти коодинаты шарика (центр шарика нужен или левая верхняя точка bounding box...).
    5. Если возникнет подобная задача, то см. пункт 1.

    Вместо
    Код (PHP):
    1. $r=($color>>16) & 0xFF;
    2. $g=($color>>8) & 0xFF;
    3. $b=$color & 0xFF; 
    можно использовать функцию imagecolorsforindex.
     
  3. KYIVSTAR

    KYIVSTAR Активный пользователь

    С нами с:
    9 май 2012
    Сообщения:
    12
    Симпатии:
    0
    Спасибо, всё работает!