76 lines
2.6 KiB
Python
76 lines
2.6 KiB
Python
import abc
|
|
import ImageProcessingWorker
|
|
|
|
|
|
import numpy as np
|
|
|
|
from PyQt6.QtWidgets import QApplication, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QWidget, QFileDialog, QSlider, QLineEdit, QDialog
|
|
from PyQt6.QtGui import QPixmap, QImage, QColor, QPainter, QPen
|
|
from PyQt6.QtCore import Qt, QPoint, QThread
|
|
|
|
from .ImageParameterDialog import ImageParameterDialog
|
|
|
|
|
|
class HCLDialog(ImageParameterDialog):
|
|
def __init__(self, hsv_image):
|
|
super().__init__(hsv_image, ImageProcessingWorker.HLSImageProcessingWorker)
|
|
self.setWindowTitle("HCL Correction")
|
|
self.layout = QVBoxLayout()
|
|
|
|
self.hue_slider = QSlider(Qt.Orientation.Horizontal)
|
|
self.hue_slider.setRange(-180, 180)
|
|
|
|
self.chroma_slider = QSlider(Qt.Orientation.Horizontal)
|
|
self.chroma_slider.setRange(-100, 100)
|
|
|
|
self.lightness_slider = QSlider(Qt.Orientation.Horizontal)
|
|
self.lightness_slider.setRange(-100, 100)
|
|
|
|
|
|
self.label1 = QLabel("Hue Value: 0")
|
|
self.label2 = QLabel("Chroma Value: 0")
|
|
self.label3 = QLabel("Lightness Value: 0")
|
|
|
|
self.hue_slider.valueChanged.connect(lambda value: self.update(self.label1, value, "Hue"))
|
|
self.chroma_slider.valueChanged.connect(lambda value: self.update(self.label2, value, "Chroma"))
|
|
self.lightness_slider.valueChanged.connect(lambda value: self.update(self.label3, value, "Lightness"))
|
|
|
|
self.layout.addWidget(self.label1)
|
|
self.layout.addWidget(self.hue_slider)
|
|
self.layout.addWidget(self.label2)
|
|
self.layout.addWidget(self.chroma_slider)
|
|
self.layout.addWidget(self.label3)
|
|
self.layout.addWidget(self.lightness_slider)
|
|
self.layout.addWidget(self.button_box)
|
|
|
|
self.setLayout(self.layout)
|
|
|
|
def update(self, label, value, slider_name):
|
|
label.setText(f"{slider_name} Value: {value}")
|
|
self.send_to_process({
|
|
'hue': self.hue_slider.value(),
|
|
'chroma': self.chroma_slider.value() / 100.0,
|
|
'lightness': self.lightness_slider.value() / 100.0
|
|
})
|
|
|
|
|
|
|
|
def process_image(self,hsv_image, values):
|
|
hue = values.get('hue', 0.0) / 2
|
|
chroma = values.get('chroma', 0.0)
|
|
lightness = values.get('lightness', 0.0)
|
|
|
|
hsv_image[..., 0] = (hsv_image[..., 0] + hue) % 180
|
|
|
|
hsv_image[..., 1] += (255 * lightness)
|
|
hsv_image[..., 1] = np.clip(hsv_image[..., 1], 0, 255)
|
|
|
|
hsv_image[..., 2] += (255 * chroma)
|
|
hsv_image[..., 2] = np.clip(hsv_image[..., 2], 0, 255)
|
|
|
|
|
|
return hsv_image
|
|
|
|
@classmethod
|
|
def dialog_name(cls):
|
|
return "Hue-Chroma-Lightness" |