Нужно найти способ извлечь координаты затененной области из файла изображения - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть файл изображения с заштрихованными областями в форме пиццы:

here

Мне нужен способ извлечь координаты заштрихованной области, чтобы я мог использовать их вHTML-код, чтобы сделать область кликабельной.Это должно быть сделано динамически, так как у меня есть тысячи изображений.В настоящее время я занимаюсь разработкой сайта на PHP, поэтому все, что написано на php или javascript, будет полезно.Если кто-нибудь знает, как это сделать, пожалуйста, дайте мне знать.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2011

Я могу вспомнить ряд шагов, которые вам нужно предпринять, но, поскольку у вас нет отправной точки, я опишу, каков будет мой подход на высоком уровне.

  1. Найдите центральную точку, назовите ее c. Не слишком жесткая ширина / 2 высоты / 2. Это Похоже, эти изображения были созданы компьютером, поэтому я бы предполагают, что все они стандартны по своим размерам и положению круг.

  2. Теперь вам нужно найти все точки на окружности с радиусом r (расстояние от центра до легко узнаваемого оранжевого область, которая существует только в затененной области) и центр c.

  3. Проверьте все эти точки на вашем изображении, используя библиотеку PHPs imagick и getImagePixelColor чтобы проверить, близок ли результат к легко узнаваемый оранжевый. Если это так, у вас есть совпадение.

  4. Для каждого совпадения вектор от центра круга до спичка является частью затененной области. Найти только крайние совпадения регион, и у вас есть ваши координаты.


Я уверен, что это всего лишь один подход, и есть много способов сделать это, но я бы посоветовал вам начать реализацию, если вы думаете, что это сработает, а затем задать более конкретный вопрос, когда вы застряли.

1 голос
/ 15 октября 2014

Я бы использовал ImageMagick для преобразования диска из полярных в декартовые координаты, а затем, когда вы укажете, какие заштрихованные области вы на самом деле имеете в виду, я подозреваю, что все остальное будет легко:

convert disc.png -distort DePolar 0 cartesian.jpg

enter image description here

Поскольку у меня нет отзывов от вас, я вроде как на ногах. Таким образом, вы также можете преобразовать все, что не закрашено серым, в белый, а все, что серо, в черный, например:

convert disc.png -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black out.png

enter image description here

И вы можете сделать оба сразу:

convert disc.png -distort depolar 0 -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black out.png

enter image description here

Затем вы можете вставить изображение в одну строку, например:

convert disc.png -distort depolar 0 -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black -resize x1\! out.png

(я покажу это при высоте 10 пикселей, чтобы вы могли видеть это)

enter image description here

Теперь ваши координаты - это место, где строка меняется с черного на белый, а белый на черный. Вы можете извлечь их в текст и разобрать их. Либо так:

convert disc.png -distort depolar 0 -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black -resize x1\! -colorspace gray -threshold 50% txt: | more 
# ImageMagick pixel enumeration: 1000,1,255,srgba
0,0: (255,255,255,1)  #FFFFFF  white
1,0: (255,255,255,1)  #FFFFFF  white
2,0: (255,255,255,1)  #FFFFFF  white
3,0: (255,255,255,1)  #FFFFFF  white
4,0: (255,255,255,1)  #FFFFFF  white
5,0: (255,255,255,1)  #FFFFFF  white
6,0: (255,255,255,1)  #FFFFFF  white
7,0: (255,255,255,1)  #FFFFFF  white

Или вот так:

convert disc.png -distort depolar 0 -fuzz 5% -fill black -opaque rgb\(211,211,211\) -fill white +opaque black -resize x1\! -colorspace gray -threshold 50% -compress none pbm: | more 
P1
1000 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...