Библиотека для распознавания цветных(u)красных областей изображения

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

Он сканирует изображение и объявляет смежные области одного и того же цвета частями одной и той же области карты изображения.

Я могу себе представить, что черный используется для краев, для обозначения областей, а темно-синий используется для текста, поэтому его следует игнорировать. Представьте себе карту США, где штаты обведены черным цветом, названия штатов выделены темно-синим цветом, а штаты окрашены в красный цвет (ни черный, ни темно-синий).

Знаете ли вы какую-нибудь библиотеку, которая помогла бы в этом? Я предпочитаю C/C++, или Python, или Delphi, но соглашусь на любом языке, просто чтобы посмотреть, как это делается.

Ответы (2)

Возможно, если мы вернемся к вашему предыдущему вопросу : у вас есть цветной план этажа, который вы преобразовали в карту-изображение, и теперь вы хотите найти, в какой комнате находится курсор. Вместо того, чтобы возиться с промежуточной картой-изображением, почему бы и нет? просто использовать javascript для определения цвета пикселя под курсором в любое время? Затем вы должны найти это значение rgb в списке цветов комнаты.

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

Отличная идея! НО , я хочу, чтобы клиенты рисовали план этажа, что затрудняет ограничение выбора цвета. Тем не менее, я могу проверить, как вы говорите, «небольшие различия в rgb» и отклонить любые такие при первом анализе изображения.
Меня очень соблазняет это решение, так как оно кажется очень простым. Однако я не уверен, насколько хорошо это будет работать с большим количеством комнат — подумайте о большом торговом центре, фабрике, гостинице или офисном здании. Я думаю, что разница может быть видна человеческому глазу.
Вы можете использовать 2 изображения, одно из которых вы представляете пользователю, а второе — для поиска цвета. (В любом случае вам понадобится отдельный холст в javascript). Вы можете вручную обработать это второе изображение, заполнив каждую область уникальным цветом, а также создав сопоставление цвета с идентификацией области.
Вы имеете в виду, что у меня есть второе изображение, но не отображать его? Затем, когда пользователь нажимает на отображаемое изображение в точках X, Y, я могу вызвать context.getImageData(X,Y, ...)второе изображение?
Да. Возможно, вы могли бы заставить своих клиентов начать со второго изображения в качестве основы, а затем добавить свои аннотации и «более красивые» цвета для создания первого изображения.

Если вы хотите использовать в своей карте изображения только простые прямоугольники, а не сложные полигоны, возможный путь исследования — использовать ImageMagick для определения размера и местоположения цветной области. Например, используя изображение в предыдущем вопросе и выбрав цвет левой комнаты как шестнадцатеричное значение rgb e97978, вы можете запустить

convert https://i.stack.imgur.com/fp5Ff.jpg -fill white +opaque '#e97978'  /tmp/out.png

чтобы раскрасить только эту комнату на белом фоне:комната

Если вы добавите -trimопцию в конец, вы получите обрезанное изображение:

отделанная комната

который является ограничивающим прямоугольником комнаты, но если вы используете его identifyна полученном изображении, у вас будет не только размер этого прямоугольника (196x179), но и его левое верхнее положение (+111+53) в исходном увеличенном изображении:

$ identify /tmp/out.png
/tmp/out.png PNG 196x179 900x291+111+53  ...

Таким образом, если вы можете раскрасить каждую комнату по-разному и, желательно, не использовать jpg с потерями, который искажает цвета, вы можете быть ближе к автоматизированному алгоритму.

Мне нравится это 9 и я поддерживаю его), но должна быть поддержка полигонов :-(
Canny Edge Detection тоже выглядит очень интересно