32 lines
932 B
Python
32 lines
932 B
Python
import dearpygui.dearpygui as dpg
|
|
import numpy as np
|
|
|
|
from .pipeline_stage_widget import PipelineStageWidget
|
|
|
|
|
|
class MonochromeStage(PipelineStageWidget):
|
|
name = "Monochrome"
|
|
register = True
|
|
has_pipeline_in = True
|
|
has_pipeline_out = True
|
|
|
|
def __init__(self, manager, logger):
|
|
super().__init__(manager, logger, default_stage_out="monochrome")
|
|
|
|
def create_pipeline_stage_content(self):
|
|
dpg.add_text("Converting to grayscale...")
|
|
|
|
def on_pipeline_data(self, img):
|
|
if img is None:
|
|
return
|
|
gray = img.copy()
|
|
rgb = gray[..., :3]
|
|
alpha = gray[..., 3:] if gray.shape[2] == 4 else np.ones_like(
|
|
rgb[..., :1])
|
|
|
|
luminance = np.dot(rgb, [0.2126, 0.7152, 0.0722])[..., np.newaxis]
|
|
gray_rgba = np.concatenate(
|
|
[luminance, luminance, luminance, alpha], axis=-1)
|
|
|
|
self.publish_stage(gray_rgba.astype(np.float32))
|