Author Topic: Подсчет количества пикселей  (Read 12986 times)

0 Members and 1 Guest are viewing this topic.

keydaci

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Подсчет количества пикселей
« on: June 12, 2013, 02:24:20 PM »
Подскажите плиз скрипт который в прямоугольной области подсчитывает колв-во пикселей одинакового цвета.
т.е. в логе должно быть сколько цветов и кол-во пикселей этих цветов, что то типа
цвет хххххх - 43 пиксела
цвет yyyyyy - 12 писелов
цвет zzzzzz - 33 пиксела, и т.д.

к примеру область у нас (761,294) и (794,311)
$x=761
$y=294
MOVE($x,$y)//встаем в левый верхний угол
FOR($x, $x < 794)// пробегаемся до правого нижнего угла
 FOR($y, $y < 311)
  GETSCREEN
  $clr = PXL($x,$y)//получаем код текущего пиксела
  .......      //много полезного кода, до которого я еще не допетрил ))   
 END_CYC
END_CYC
Я так понимаю, получив код цвета пикселя, этот код надо сравнить с предыдущем(предыдущими кодами) кодом, и если не совпадают, то делаем новую переменную счетчика и присваиваем  ему один. А если совпадают, то единицу прибавляем счетчику этого цвета. С возрастанием вариаций цвета надо сравнивать со всеми этими вариациями.... как то так.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Подсчет количества пикселей
« Reply #1 on: June 12, 2013, 03:08:55 PM »
Рукалицо. Есть же функция PXLCOUNT!!!

Code: (clickermann) [Select]
$color = 255
GOSUB(подсчет цветов)

$color = 15723239
GOSUB(подсчет цветов)

$color = 11444631
GOSUB(подсчет цветов)
HALT

SUB (подсчет цветов)
   GETSCREEN
   $count = PXLCOUNT(761,294, 794,311, $color)
   LOGWRITE ("Цвет: ", $color, " - ", $count, " пиксел")
END_SUB
« Last Edit: June 12, 2013, 03:10:43 PM by Oraven »

keydaci

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Подсчет количества пикселей
« Reply #2 on: June 13, 2013, 07:47:07 AM »
отлчино, это подсчет известных цветов, а как сделать чтоб он сам искал цвета пикселов  и считал их количество? причем не известно сколько будет цветов, чтоб он сам анализировал цвет каждого пиксела в прямоугольной области, и если такой цвет уже есть - прибавлял к уже существующему коунту, а если нету, то создавал новый счет и прибавлял этот цвет к нему?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Подсчет количества пикселей
« Reply #3 on: June 13, 2013, 09:01:15 AM »
Ды никак, там в области может быть сотни тысяч цветов а массивов в кликере нет. Зачем тебе это нужно? Может для нахождения уникального цвета?
Для этого есть специальная программка Unique Colors Search
http://crapware.aidf.org/forum/index.php?topic=42.msg572#msg572
Там на офф сайте все подробно описано как ей пользоваться

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подсчет количества пикселей
« Reply #4 on: June 13, 2013, 10:52:06 AM »
Написать то можно подобное, но и правда, нахрена?
И работать оно будет не быстро, особенно если область большая.


keydaci

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Подсчет количества пикселей
« Reply #5 on: June 13, 2013, 12:47:35 PM »
Нарезал около сотни картинок, размер макс 50х50, собрал в группы - т.е. в группе однотипных надо будет в последствии находить нужную. В ручную искать код цвета, подсчитать кол.во пикселей этого цвета, затем находить этот же код цвета на другой картинке подсчитать сколько таких пикселей на этой картинке, сравнивать чтоб не совпало кол.во пикселей... долго и утомительно. Думал объединить однотипные в одну большую, и просто смещать зону анализа, и в итоге получить по каждой картинке базу ее цветов и кол.во пикселей, чтоб затем знать с какими цветовыми кодами работать в последствии для нахождения нужной картинки.
Например самый простой случай и 

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подсчет количества пикселей
« Reply #6 on: June 13, 2013, 02:16:35 PM »
Размял мозги.
Предупреждал, работает не быстро.
Положить рядом с скриптом файл Find.txt, в нём будут результаты.
В логе по окончании количество найденных цветов.

Code: (clickermann) [Select]
// задаём область
$x1=600
$y1=340
$x2=609
$y2=349

TFCLEAR("Find.txt",0)
$color_find=0
LOGCLEAR
MOVE($_xmax,$_ymax)
WAITMS(50)
GETSCREEN
$y=$y1-1
FOR($y, $y < $y2)
   $x=$x1-1
   FOR($x, $x < $x2)
      $clr = PXL($x,$y) //получаем цвет текущего пиксела
      GOSUB(проверка)
   END_CYC
END_CYC
LOGWRITE ("Найдено цветов: ",$color_find)
HINTPOPUP("Подсчёт окончен")
HALT

SUB(проверка)
   $no_new=0
$i=0
   FOR($i, $i<INT(TFCOUNT("Find.txt")))
      //LOGWRITE ("i  ",$i)
      $cut=TFREAD("Find.txt",$i)
      $color=INT(STRCUT2($cut,1,STRPOS($cut,":")-1))
      //LOGWRITE ("cut  ",$cut)
      //LOGWRITE ("color  ",$color)
      IF($clr=$color)
         $number=INT(STRCUT2($cut,STRPOS($cut,":")+1,99999))
         IF(INT(TFCOUNT("Find.txt"))=1)
            TFCLEAR("Find.txt",0)
            TFWRITE("Find.txt",STRCONCAT($color,":",$number+1))
         ELSE
            TFDELETE("Find.txt",$i)
            TFWRITE("Find.txt",STRCONCAT($color,":",$number+1),$i)
         END_IF
         $i=9999999 // прерываем поиск
         $no_new=1
         WAITMS(3)
      END_IF
   END_CYC
   IF($no_new=0)     
      INC($color_find)
      //LOGWRITE ("color_find  ",$color_find)
      TFWRITE("Find.txt",STRCONCAT($clr,":1"))
   END_IF
END_SUB
« Last Edit: June 13, 2013, 02:25:46 PM by Vint »


keydaci

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Подсчет количества пикселей
« Reply #7 on: June 17, 2013, 11:39:46 AM »
спасибо огромное! То что медленно работает, не беда - это всего лишь как "инструмент" для анализа картинок, т.е. в основной скрипт я его не включу. Просто для предварительного анализа картинок и нахождения группы уникальных пикселей, с которыми уже можно дальше работать! И наверное даже можно этот скрипт добавить в шапку - как анализатор картинок!
П.С. еще момент, анализировать картинку надо непосредственно в приложении для которого пишем скрипт, т.к. если открывать ее например в фотошопе, или в др. граф. редакторе, то получаются немного другие результаты! И даже если ее открывать в редакторе - анализировать - закрвать редактор - опять открывать и анализировать, то получаются немного другие результаты, как по кол.ву цветов так и по кол.ву пикселей в общем!
« Last Edit: June 17, 2013, 11:47:23 AM by keydaci »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подсчет количества пикселей
« Reply #8 on: June 17, 2013, 02:21:17 PM »
Дело не в фотошопе и не редакторе. Значит в самой программе картинка меняется. Если не меняется можно делать по скриншоту, делал так сотню раз.
Картинка часто меняется если используется антиалиазинг элементов. С текстом это чаще всего. Во флэше и не обязательно с текстом. АА считается там на лету, что там за алгоритм, что он на одних и тех же исходниках даёт разные результаты я не знаю.


keydaci

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Подсчет количества пикселей
« Reply #9 on: June 17, 2013, 02:39:21 PM »
Использую только этот скрипт - для анализа картинок - и выдает разные результаты

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подсчет количества пикселей
« Reply #10 on: June 17, 2013, 03:08:54 PM »
Не знаю. Я проверял, у меня одни выдавал. Бывает косяк... Я для ускорения мало задержек проставил. Если мышью активно не юзать и не грузить процессор - считает правильно. Если что-то подтормаживает, не всё записывает в файл. Делает пропуски. Подобавляй задержек.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Подсчет количества пикселей
« Reply #11 on: June 17, 2013, 03:17:46 PM »
В первой твоеё картинке примере выдаёт стабильно 50 цветов.
Цвета такие:
684042:293
1340948:1
6333024:1
946958:1
4493892:2
1997854:30
12047799:32
5282128:2
11259563:2
11062440:4
8829062:2
2326307:6
10865573:1
11456686:1
10733987:2
4034109:1
1143825:2
12376252:4
2654760:2
749579:6
1012495:1
12113592:1
2982957:1
4362562:1
946702:1
815372:1
5085005:1
10931110:1
12638912:1
9748884:1
3442740:1
1209618:2
2523174:2
2457637:2
1932061:1
12244922:1
749835:1
1078032:2
12310459:1
4428099:1
1866524:1
5413458:2
11325356:2
11193770:2
8829318:3
7055723:1
4165439:1
10668450:2
11390893:1
4230976:1


keydaci

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Подсчет количества пикселей
« Reply #12 on: June 18, 2013, 12:29:37 PM »
Еще раз спасибо, да проблема была в задержках и соответственно в пропусках.
Получился отличный инструмент для анализа картинок!