Bladeren bron

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 11 maanden geleden
bovenliggende
commit
d2370f63fd
1 gewijzigde bestanden met toevoegingen van 23 en 15 verwijderingen
  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.ImageEnhance
-from qtpy import QtGui
 from qtpy import QtWidgets
 from qtpy.QtCore import Qt
-
-from .. import utils
+from qtpy.QtGui import QImage
 
 
 class BrightnessContrastDialog(QtWidgets.QDialog):
@@ -13,28 +11,29 @@ class BrightnessContrastDialog(QtWidgets.QDialog):
         self.setModal(True)
         self.setWindowTitle("Brightness/Contrast")
 
-        self.slider_brightness = self._create_slider()
-        self.slider_contrast = self._create_slider()
+        self.slider_brightness, widget_brightness = self._create_slider()
+        self.slider_contrast, widget_contrast = self._create_slider()
 
-        formLayout = QtWidgets.QFormLayout()
-        formLayout.addRow(self.tr("Brightness"), self.slider_brightness)
-        formLayout.addRow(self.tr("Contrast"), self.slider_contrast)
-        self.setLayout(formLayout)
+        form_layout = QtWidgets.QFormLayout()
+        form_layout.addRow(self.tr("Brightness"), widget_brightness)
+        form_layout.addRow(self.tr("Contrast"), widget_contrast)
+        self.setLayout(form_layout)
 
         assert isinstance(img, PIL.Image.Image)
         self.img = img
         self.callback = callback
 
-    def onNewValue(self, value):
+    def onNewValue(self, _):
         brightness = self.slider_brightness.value() / 50.0
         contrast = self.slider_contrast.value() / 50.0
 
         img = self.img
-        img = PIL.ImageEnhance.Brightness(img).enhance(brightness)
-        img = PIL.ImageEnhance.Contrast(img).enhance(contrast)
+        if brightness != 1:
+            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 = QtGui.QImage.fromData(img_data)
+        qimage = QImage(img.tobytes(), img.width, img.height, QImage.Format_RGB888)
         self.callback(qimage)
 
     def _create_slider(self):
@@ -42,4 +41,13 @@ class BrightnessContrastDialog(QtWidgets.QDialog):
         slider.setRange(0, 150)
         slider.setValue(50)
         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