Установка 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 при каждом изменении выбора, информируя другие части вашего приложения.
Эта демонстрация должна быть хорошим примером необходимой вам функции регулировки угла.
(ну, пример реализует рисование и перетаскивание контрольных точек с нуля. Я уверен, что вы можете сделать это, используя вместо этого QGraphicsEllipseItem и реагировать на их изменения положения)