Существуют ли алгоритмы для вычисления ограничивающих прямоугольников спрайтов, нарисованных на монохромном фоне?

Представьте себе простое прямоугольное растровое изображение, скажем, размером 1024x768 пикселей, заполненное белым. На растровом изображении нарисовано несколько (не перекрывающихся) спрайтов: круги, квадраты и треугольники.

Существует ли алгоритм (возможно, даже реализация C ++), который с учетом растрового изображения и цвета, который является цветом фона (белый в приведенном выше примере), дает список, содержащий наименьшие ограничивающие прямоугольники для каждого из спрайтов?

Вот пример: С левой стороны вы можете увидеть образец растрового изображения, который приведен в моем коде (вместе с информацией о том, что «фон» белый). С правой стороны вы можете увидеть то же изображение вместе с ограничивающими прямоугольниками четыре фигуры (красным); алгоритм, который я ищу, вычисляет геометрию этих прямоугольников.

Input picture Output picture

Некоторые программы рисования имеют аналогичную функцию для выбора фигур: они могут даже вычислять кажущиеся произвольными ограничивающие многоугольники. Вместо перетаскивания выделенного прямоугольника вручную, вы можете щелкнуть «фон» (какой фон, а какой нет, определяется некоторым порогом), а затем инструмент автоматически вычисляет форму объекта, нарисованного на фоне. Мне нужно что-то вроде этого, за исключением того, что я в порядке, если у меня есть только прямоугольные ограничивающие области для объектов.

Мне стало известно о OpenCV ; это кажется актуальным (кажется, это библиотека, которая включает в себя все графические алгоритмы, которые я могу придумать, а затем и некоторые из них), но из-за быстрого количества информации я не мог найти путь к алгоритму, о котором я думаю. Я был бы удивлен, если бы OpenCV не смог этого сделать, но я боюсь, что вам нужно иметь докторскую степень, чтобы его использовать. : -)

9
задан Glorfindel 15 August 2019 в 15:13
поделиться