Procházet zdrojové kódy

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 před 11 měsíci
rodič
revize
d2370f63fd
1 změnil soubory, kde provedl 23 přidání a 15 odebrání
  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