소스 검색

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 달 전
부모
커밋
d2370f63fd
1개의 변경된 파일23개의 추가작업 그리고 15개의 파일을 삭제
  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