Установка ROI полигона с помощью мыши в Qt

Кто-нибудь есть идеи, как я могу это реализовать? Я хотел бы иметь функцию, в основном точно такую ​​же, как impoly в matlab или инструмент "сечения многоугольника" в imageJ, где вы нажимаете, чтобы сформировать многоугольное сечение, а затем каждый узел может быть скорректирован и т. Д. Я также хотел бы получить доступ к этой функции из Qt, так как я пытаюсь сделать графический интерфейс для небольшой программы, которую я написал.

Кроме того, я хотел бы избегать вызовов функции matlab, потому что она является частью набора инструментов для обработки изображений, который не является бесплатным. Благодарю.

2 ответа

Решение

Я думаю, что вам нужно будет написать это самостоятельно. В книге " Программирование на графическом интерфейсе C++ с использованием Qt 4" есть отличный пример (в Интернете есть копия в формате PDF; я думаю, что это законно), где они показывают, как создать диаграмму с узлами и ссылками. Глава называется "Рендеринг на основе элементов с графическим представлением".

Основная идея состоит в том, что у вас есть несколько перетаскиваемых узлов, которые являются QGraphicsItems с ItemIsMovable флаг установлен в true, а затем некоторые ссылки, которые связывают их, которые являются QGraphicsLineItems. Все это войдет в составной QGraphicsItem, представляющий ROI, и все это войдет в QGraphicsScene, который будет отображаться QGraphicsView.

Итог: нет встроенной копии функции MATLAB, но все инструменты для вас.

Я думаю, что лучший способ реализовать это - использовать каркас Qt Graphics View. Создайте сцену с Предметом, отображающим ваше изображение сзади, и добавьте перетаскиваемые Предметы сверху, представляющие углы вашего многоугольника.

Ваш инструмент выбора, вероятно, должен быть подклассом QGraphicsObject, в котором размещаются углы многоугольника в качестве дочерних элементов, и QGraphicsPolygonItem под углами, обновляемыми при каждом изменении пользователем выбора. Поскольку QGraphicsObject наследует QObject, вы можете излучать сигналы с аргументом QPolygonF или QPolygon при каждом изменении выбора, информируя другие части вашего приложения.

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

Qt Pathstroke Demo

(ну, пример реализует рисование и перетаскивание контрольных точек с нуля. Я уверен, что вы можете сделать это, используя вместо этого QGraphicsEllipseItem и реагировать на их изменения положения)

Другие вопросы по тегам