Установка полигона ROI с помощью мыши в Qt
Вопрос
У кого-нибудь есть идеи, как я могу реализовать это?Я хотел бы иметь функцию в основном так же, как Inboly в MatLab или инструмент «Разделы многоугольника» в ImageJ, где вы нажимаете, чтобы сформировать многоугольный раздел, а затем каждый узел можно регулировать и т. Д. Я также хотел бы иметь доступДля этой функции из Qt с тех пор, как я пытаюсь сделать GUI для небольшой программы, которую я написал.
Также я хотел бы избежать звонков в функцию matlab, потому что это часть инструментов обработки изображений, который не содержит бесплатно.Спасибо.
Решение
Я думаю, вам нужно будет кодировать это самостоятельно. Существует отличный пример в Программирование C ++ GUI с Qt 4 Книга (есть PDF копия, плавающая вокруг онлайн; Я думаю, что это законно), где они показывают, как создать диаграмму с узлами и ссылками. Глава называется «рендеринг на основе элементов с графическим видом».
Основная идея состоит в том, что у вас есть несколько узлов перегруженных, которые являются qgraphicsites / a> с флагом ItemIsMovable
, установленным на true
, а затем некоторые ссылки, которые их соединяют, которые являются qgraphicslineTems . Все они попадут в композитный QGraphicsItem, представляющий ROI, и все они попадут в qgraphicscensscene , который будет отображаться на qgraphicsview .
Нижняя строка: нет встроенной копии функции MATLAB, но все инструменты для вас.
Другие советы
Я думаю, что лучший способ реализовать это использует каркас просмотра графики QT. Создайте сцену с элементом, отображаемым изображением в задней панели и добавьте элементы Draggable сверху, представляющие углы вашего многоугольника.
Ваш инструмент выбора, вероятно, должен быть подклассом QGraphicsObject, хостинг углы многоугольника как дочерние элементы, а также QGraphicsPolyGonItem ниже углов обновляются всякий раз, когда пользователь ReadSusts выделение. Поскольку QGraphicsObject наследует Qobject, вы можете излучать сигналы с аргументом QPolygonf или Qpolygon, когда выделение изменяется, информируя другие части вашего приложения
Эта демонстрация должна быть хорошим примером нужной вам нужной функции.
(ну, пример реализует рисунок и перетаскивание контрольных точек с нуля. Я уверен, что вы можете сделать это, используя qgraphicsellipseitem вместо этого и реагировать на их изменение положения)