支持调整顶点大小以及删除顶点

This commit is contained in:
yatengLG 2023-08-10 14:35:56 +08:00
parent fb0205d993
commit 010b8667ca
5 changed files with 38 additions and 13 deletions

View File

@ -21,4 +21,5 @@ label:
- color: '#5c3566' - color: '#5c3566'
name: fence name: fence
language: en language: en
mask_alpha: 0.6 mask_alpha: 0.4
vertex_size: 2

View File

@ -102,7 +102,6 @@ class AnnosDockWidget(QtWidgets.QWidget, Ui_Form):
def set_polygon_selected(self): def set_polygon_selected(self):
items = self.listWidget.selectedItems() items = self.listWidget.selectedItems()
have_selected = True if items else False have_selected = True if items else False
if have_selected: if have_selected:
self.mainwindow.scene.change_mode_to_edit() self.mainwindow.scene.change_mode_to_edit()

View File

@ -2,7 +2,7 @@
# @Author : LG # @Author : LG
from PyQt5 import QtWidgets, QtGui, QtCore from PyQt5 import QtWidgets, QtGui, QtCore
from widgets.polygon import Polygon from widgets.polygon import Polygon, Vertex
from configs import STATUSMode, CLICKMode, DRAWMode, CONTOURMode from configs import STATUSMode, CLICKMode, DRAWMode, CONTOURMode
from PIL import Image from PIL import Image
import numpy as np import numpy as np
@ -300,12 +300,16 @@ class AnnotationScene(QtWidgets.QGraphicsScene):
def delete_selected_graph(self): def delete_selected_graph(self):
deleted_layer = None deleted_layer = None
for item in self.selectedItems(): for item in self.selectedItems():
if item in self.mainwindow.polygons: if isinstance(item, Polygon) and (item in self.mainwindow.polygons):
self.mainwindow.polygons.remove(item) self.mainwindow.polygons.remove(item)
item.delete() item.delete()
self.removeItem(item) self.removeItem(item)
deleted_layer = item.zValue() deleted_layer = item.zValue()
del item del item
elif isinstance(item, Vertex):
index = item.polygon.vertexs.index(item)
item.polygon.removePoint(index)
if deleted_layer is not None: if deleted_layer is not None:
for p in self.mainwindow.polygons: for p in self.mainwindow.polygons:
if p.zValue() > deleted_layer: if p.zValue() > deleted_layer:

View File

@ -165,16 +165,28 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.pths_actions[model_name] = action self.pths_actions[model_name] = action
self.menuSAM_model.addAction(action) self.menuSAM_model.addAction(action)
# mask alpha
self.toolBar.addSeparator() self.toolBar.addSeparator()
self.mask_aplha = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal, self) self.mask_aplha = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal, self)
self.mask_aplha.setFixedWidth(50) self.mask_aplha.setFixedWidth(50)
self.mask_aplha.setStatusTip('Mask alpha.') self.mask_aplha.setStatusTip('Mask alpha.')
self.mask_aplha.setToolTip('Mask alpha ') self.mask_aplha.setToolTip('Mask alpha')
self.mask_aplha.setMaximum(10) self.mask_aplha.setMaximum(10)
self.mask_aplha.setMinimum(3) self.mask_aplha.setMinimum(3)
self.mask_aplha.valueChanged.connect(self.change_mask_aplha) self.mask_aplha.valueChanged.connect(self.change_mask_aplha)
self.toolBar.addWidget(self.mask_aplha) self.toolBar.addWidget(self.mask_aplha)
# vertex size
self.toolBar.addSeparator()
self.vertex_size = QtWidgets.QSlider(QtCore.Qt.Orientation.Horizontal, self)
self.vertex_size.setFixedWidth(50)
self.vertex_size.setStatusTip('Vertex size.')
self.vertex_size.setToolTip('Vertex size')
self.vertex_size.setMaximum(10)
self.vertex_size.setMinimum(2)
self.vertex_size.valueChanged.connect(self.change_vertex_size)
self.toolBar.addWidget(self.vertex_size)
self.trans = QtCore.QTranslator() self.trans = QtCore.QTranslator()
def translate(self, language='zh'): def translate(self, language='zh'):
@ -233,6 +245,9 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.cfg['mask_alpha'] = mask_alpha self.cfg['mask_alpha'] = mask_alpha
self.mask_aplha.setValue(mask_alpha*10) self.mask_aplha.setValue(mask_alpha*10)
vertex_size = self.cfg.get('vertex_size', 2)
self.cfg['vertex_size'] = int(vertex_size)
model_name = self.cfg.get('model_name', '') model_name = self.cfg.get('model_name', '')
self.init_segment_anything(model_name) self.init_segment_anything(model_name)
@ -558,6 +573,12 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.scene.update_mask() self.scene.update_mask()
self.cfg['mask_alpha'] = value self.cfg['mask_alpha'] = value
def change_vertex_size(self):
value = self.vertex_size.value()
self.cfg['vertex_size'] = value
if self.current_index is not None:
self.show_image(self.current_index)
def ISAT_to_VOC(self): def ISAT_to_VOC(self):
self.ISAT_to_VOC_dialog.reset_gui() self.ISAT_to_VOC_dialog.reset_gui()
self.ISAT_to_VOC_dialog.show() self.ISAT_to_VOC_dialog.show()

View File

@ -6,14 +6,13 @@ from annotation import Object
import typing import typing
class Vertex(QtWidgets.QGraphicsPathItem): class Vertex(QtWidgets.QGraphicsPathItem):
def __init__(self, polygon, index, color): def __init__(self, polygon, color, nohover_size=2):
super(Vertex, self).__init__() super(Vertex, self).__init__()
self.polygon = polygon self.polygon = polygon
self.index = index
self.color = color self.color = color
self.hover_size = 3 self.nohover_size = nohover_size
self.nohover_size = 2 self.hover_size = self.nohover_size + 2
self.line_width = 0 self.line_width = 0
self.nohover = QtGui.QPainterPath() self.nohover = QtGui.QPainterPath()
@ -32,7 +31,8 @@ class Vertex(QtWidgets.QGraphicsPathItem):
self.setZValue(1e5) self.setZValue(1e5)
def itemChange(self, change: 'QtWidgets.QGraphicsItem.GraphicsItemChange', value: typing.Any): def itemChange(self, change: 'QtWidgets.QGraphicsItem.GraphicsItemChange', value: typing.Any):
if change == QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSelectedHasChanged:
self.scene().mainwindow.actionDelete.setEnabled(self.isSelected())
if change == QtWidgets.QGraphicsItem.GraphicsItemChange.ItemPositionChange and self.isEnabled(): if change == QtWidgets.QGraphicsItem.GraphicsItemChange.ItemPositionChange and self.isEnabled():
# 限制顶点移动到图外 # 限制顶点移动到图外
if value.x() < 0: if value.x() < 0:
@ -43,8 +43,8 @@ class Vertex(QtWidgets.QGraphicsPathItem):
value.setY(0) value.setY(0)
if value.y() > self.scene().height()-1: if value.y() > self.scene().height()-1:
value.setY(self.scene().height()-1) value.setY(self.scene().height()-1)
index = self.polygon.vertexs.index(self)
self.polygon.movePoint(self.index, value) self.polygon.movePoint(index, value)
return super(Vertex, self).itemChange(change, value) return super(Vertex, self).itemChange(change, value)
@ -85,7 +85,7 @@ class Polygon(QtWidgets.QGraphicsPolygonItem):
def addPoint(self, point): def addPoint(self, point):
self.points.append(point) self.points.append(point)
vertex = Vertex(self, len(self.points)-1, self.color) vertex = Vertex(self, self.color, self.scene().mainwindow.cfg['vertex_size'])
# 添加路径点 # 添加路径点
self.scene().addItem(vertex) self.scene().addItem(vertex)
self.vertexs.append(vertex) self.vertexs.append(vertex)