Представьте себе простое прямоугольное растровое изображение, скажем, 1024x768 пикселей, заполненное белым. На растровом изображении нарисовано несколько (не перекрывающихся) спрайтов: круги, квадраты и треугольники.
Существует ли алгоритм (возможно, даже реализация C ++), который, учитывая растровое изображение и цвет, являющийся цветом фона (белый, в приведенном выше примере), дает список, содержащий наименьшие ограничивающие прямоугольники для каждого из спрайтов?
Вот пример: на левой стороне вы можете увидеть пример растрового изображения, в котором указан мой код (вместе с информацией о том, что «фон» белый). На правой стороне вы можете увидеть то же изображение вместе с ограничивающими прямоугольниками четырех фигур (красным); алгоритм, который я ищу, вычисляет геометрию этих прямоугольников.
Входное изображение http://s1.directupload.net/images/111215/ruycwlgl.png Выходное изображение http://s1.directupload.net/images/111215/encr84ps.png
Некоторые программы рисования имеют похожую функцию для выбора форм: они могут даже вычислять, казалось бы, произвольные ограничивающие полигоны. Вместо того, чтобы перетаскивать прямоугольник выбора вручную, вы можете щелкнуть «фон» (какой фон, а какой нет, определяется некоторым порогом), а затем инструмент автоматически вычисляет форму объекта, нарисованного на фоне. Мне нужно что-то вроде этого, за исключением того, что у меня все отлично, если у меня есть прямоугольные ограничивающие области для объектов.
Мне стало известно о OpenCV ; он кажется уместным (кажется, что это библиотека, которая включает в себя все графические алгоритмы, которые я могу придумать, а затем и некоторые), но из-за быстрого количества информации я не смог найти путь к алгоритму, о котором я думаю. Я был бы удивлен, если бы OpenCV не смог сделать это, но я боюсь, что вам нужен доктор, чтобы использовать его. : -)