Skip to content

Commit

Permalink
Optimize the brightness contrast adjustment
Browse files Browse the repository at this point in the history
Unify the naming style of variables, add specific numerical display labels, and speed up the response speed of adjustments (especially for large images)
  • Loading branch information
PairZhu authored and wkentaro committed Jun 13, 2024
1 parent 5cbcd0e commit ac34a98
Showing 1 changed file with 23 additions and 15 deletions.
38 changes: 23 additions & 15 deletions labelme/widgets/brightness_contrast_dialog.py
Original file line number Diff line number Diff line change
@@ -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):
Expand All @@ -13,33 +11,43 @@ def __init__(self, img, callback, parent=None):
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):
slider = QtWidgets.QSlider(Qt.Horizontal)
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

0 comments on commit ac34a98

Please sign in to comment.