Browse Source

Optimize the brightness contrast adjustment

Unify the naming style of variables, add specific numerical display labels, and speed up the response speed of adjustments (especially for large images)
PairZhu 1 year ago
parent
commit
d2370f63fd
1 changed files with 23 additions and 15 deletions
  1. 23 15
      labelme/widgets/brightness_contrast_dialog.py

+ 23 - 15
labelme/widgets/brightness_contrast_dialog.py

@@ -1,10 +1,8 @@
 import PIL.Image
 import PIL.Image
 import PIL.ImageEnhance
 import PIL.ImageEnhance
-from qtpy import QtGui
 from qtpy import QtWidgets
 from qtpy import QtWidgets
 from qtpy.QtCore import Qt
 from qtpy.QtCore import Qt
-
+from qtpy.QtGui import QImage
-from .. import utils
 
 
 
 
 class BrightnessContrastDialog(QtWidgets.QDialog):
 class BrightnessContrastDialog(QtWidgets.QDialog):
@@ -13,28 +11,29 @@ class BrightnessContrastDialog(QtWidgets.QDialog):
         self.setModal(True)
         self.setModal(True)
         self.setWindowTitle("Brightness/Contrast")
         self.setWindowTitle("Brightness/Contrast")
 
 
-        self.slider_brightness = self._create_slider()
+        self.slider_brightness, widget_brightness = self._create_slider()
-        self.slider_contrast = self._create_slider()
+        self.slider_contrast, widget_contrast = self._create_slider()
 
 
-        formLayout = QtWidgets.QFormLayout()
+        form_layout = QtWidgets.QFormLayout()
-        formLayout.addRow(self.tr("Brightness"), self.slider_brightness)
+        form_layout.addRow(self.tr("Brightness"), widget_brightness)
-        formLayout.addRow(self.tr("Contrast"), self.slider_contrast)
+        form_layout.addRow(self.tr("Contrast"), widget_contrast)
-        self.setLayout(formLayout)
+        self.setLayout(form_layout)
 
 
         assert isinstance(img, PIL.Image.Image)
         assert isinstance(img, PIL.Image.Image)
         self.img = img
         self.img = img
         self.callback = callback
         self.callback = callback
 
 
-    def onNewValue(self, value):
+    def onNewValue(self, _):
         brightness = self.slider_brightness.value() / 50.0
         brightness = self.slider_brightness.value() / 50.0
         contrast = self.slider_contrast.value() / 50.0
         contrast = self.slider_contrast.value() / 50.0
 
 
         img = self.img
         img = self.img
-        img = PIL.ImageEnhance.Brightness(img).enhance(brightness)
+        if brightness != 1:
-        img = PIL.ImageEnhance.Contrast(img).enhance(contrast)
+            img = PIL.ImageEnhance.Brightness(img).enhance(brightness)
+        if contrast != 1:
+            img = PIL.ImageEnhance.Contrast(img).enhance(contrast)
 
 
-        img_data = utils.img_pil_to_data(img)
+        qimage = QImage(img.tobytes(), img.width, img.height, QImage.Format_RGB888)
-        qimage = QtGui.QImage.fromData(img_data)
         self.callback(qimage)
         self.callback(qimage)
 
 
     def _create_slider(self):
     def _create_slider(self):
@@ -42,4 +41,13 @@ class BrightnessContrastDialog(QtWidgets.QDialog):
         slider.setRange(0, 150)
         slider.setRange(0, 150)
         slider.setValue(50)
         slider.setValue(50)
         slider.valueChanged.connect(self.onNewValue)
         slider.valueChanged.connect(self.onNewValue)
-        return slider
+        value_label = QtWidgets.QLabel(f"{slider.value() / 50:.2f}")
+        slider.valueChanged.connect(
+            lambda value: value_label.setText(f"{value / 50:.2f}")
+        )
+        layout = QtWidgets.QHBoxLayout()
+        layout.addWidget(slider)
+        layout.addWidget(value_label)
+        widget = QtWidgets.QWidget()
+        widget.setLayout(layout)
+        return slider, widget