Skip to content

Commit 09bc580

Browse files
committed
use processed image for peek and save
1 parent 6fa85ad commit 09bc580

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

grayscale_image_processing_widget/main_widget.py

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def __init__(self):
2323

2424
self.img_path = None
2525
self.original_img = None
26+
self.processed_img = None
2627

2728
self.setWindowTitle("Grayscale Image Processing")
2829
self.resize(1000, 500)
@@ -59,9 +60,9 @@ def __init__(self):
5960
self.img_widget.setFocus()
6061

6162
def connect_ui(self):
62-
self.dock.connect_ui(self.update_img)
63+
self.dock.connect_ui(self.start_process_image)
6364
self.dock.peek_groupbox.peek_button.pressed.connect(self.peek_original_img)
64-
self.dock.peek_groupbox.peek_button.released.connect(self.update_img)
65+
self.dock.peek_groupbox.peek_button.released.connect(self.show_processed_image)
6566
self.dock.save_groupbox.save_button.clicked.connect(self.save_button_clicked)
6667
self.dock.save_groupbox.save_as_button.clicked.connect(
6768
self.save_as_button_clicked
@@ -71,14 +72,15 @@ def setup_start_process_worker(self, image):
7172
self.process_worker = ProcessWorker(self.process_img, image)
7273
self.process_worker.moveToThread(self.process_thread)
7374
self.process_thread.started.connect(self.process_worker.run)
74-
self.process_worker.finished.connect(self.finished_process)
75+
self.process_worker.finished.connect(self.finished_process_image)
7576

76-
def finished_process(self, processed_image):
77+
def finished_process_image(self, processed_image):
7778
self.process_thread.exit()
78-
self.img_widget.setImage(processed_image)
79+
self.processed_img = processed_image
7980
self.setCursor(QtCore.Qt.ArrowCursor)
81+
self.show_processed_image()
8082

81-
def update_img(self):
83+
def start_process_image(self):
8284
if self.img_path:
8385
self.setup_start_process_worker(self.original_img)
8486
self.process_thread.start()
@@ -87,17 +89,19 @@ def update_img(self):
8789
def process_img(self, img):
8890
process_widget = self.dock.process_groupbox.stacked_layout.currentWidget()
8991
oriented_image = self.dock.orient_groupbox.orient_img(img)
90-
processed_img = process_widget.process_img(oriented_image)
91-
return processed_img
92+
return process_widget.process_img(oriented_image)
9293

9394
def peek_original_img(self):
9495
oriented_image = self.dock.orient_groupbox.orient_img(self.original_img)
9596
self.img_widget.setImage(oriented_image)
9697

98+
def show_processed_image(self):
99+
self.img_widget.setImage(self.processed_img)
100+
97101
def read_img(self, path):
98102
self.img_path = path
99103
self.original_img = cv.imread(str(self.img_path), cv.IMREAD_GRAYSCALE)
100-
self.update_img()
104+
self.start_process_image()
101105
self.dock.process_groupbox.adjust_range(self.original_img.shape)
102106

103107
def dragEnterEvent(self, e):
@@ -134,11 +138,9 @@ def gui_save(self, settings):
134138
settings.setValue("Window/state", self.saveState())
135139

136140
def gui_restore(self, settings):
137-
geometry = settings.value("Window/geometry")
138-
if geometry:
141+
if geometry := settings.value("Window/geometry"):
139142
self.restoreGeometry(geometry)
140-
state = settings.value("Window/state")
141-
if state:
143+
if state := settings.value("Window/state"):
142144
self.restoreState(state)
143145
self.dock.gui_restore(settings)
144146

@@ -157,8 +159,9 @@ def save_as_button_clicked(self):
157159
self, "Save As", str(self.img_path)
158160
)
159161
if save_url:
160-
cv.imwrite(save_url, self.process_img(self.original_img))
161-
self.ask_load_saved(Path(save_url))
162+
save_path = Path(save_url)
163+
if self.processed_img is not None:
164+
self.save_image(save_path, self.processed_img)
162165

163166
def save_button_clicked(self):
164167
if self.img_path:
@@ -168,18 +171,26 @@ def save_button_clicked(self):
168171
f"{self.img_path.name} already exists.\n" f"Do you want to replace it?",
169172
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
170173
)
171-
if reply == QtWidgets.QMessageBox.Yes:
172-
cv.imwrite(str(self.img_path), self.process_img(self.original_img))
173-
self.ask_load_saved(Path(self.img_path))
174+
if reply == QtWidgets.QMessageBox.Yes and self.processed_img is not None:
175+
self.save_image(self.img_path, self.processed_img)
176+
177+
def save_image(self, save_path, img):
178+
try:
179+
cv.imwrite(str(save_path), img)
180+
except Exception as e:
181+
self.error_dialog(e.err)
182+
else:
183+
self.ask_load_saved(save_path)
174184

175185
def ask_load_saved(self, save_path):
176186
if self.img_path:
177187
reply = QtWidgets.QMessageBox.warning(
178188
self,
179189
"Load Saved",
180-
f"Do you want to load the saved file?",
190+
"Do you want to load the saved file?",
181191
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
182192
)
193+
183194
if reply == QtWidgets.QMessageBox.Yes:
184195
self.read_img(save_path)
185196

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "grayscale-image-processing-widget"
3-
version = "0.1.0"
3+
version = "0.1.1"
44
description = "GUI to explore OpenCV grayscale image processing functions"
55
authors = ["wenliangyeoh <[email protected]>"]
66

0 commit comments

Comments
 (0)