Skip to content

Commit fb1c984

Browse files
committed
refactor: most of main code
1 parent 4588b19 commit fb1c984

19 files changed

+418
-266
lines changed

script/contrast_and_saturation.py

Lines changed: 12 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,22 @@
11
import cv2
2-
import numpy
2+
import numpy as np
33
import math
44

5-
def contrast_and_brightness(img, brightness=0 , contrast=100):
5+
def contrast_and_brightness(img, brightness=0, contrast=100):
66
B = brightness / 255.0
7-
c = contrast / 255.0
7+
c = contrast / 255.0
88
k = math.tan((45 + 44 * c) / 180 * math.pi)
99

10-
img = (img - 127.5 * (1 - B)) * k + 127.5 * (1 + B)
11-
12-
# values between 0-255
13-
img = numpy.clip(img, 0, 255).astype(numpy.uint8)
14-
return img
15-
16-
def saturation_and_lightness(img, lightness, saturation):
17-
# origin_img = img
18-
19-
# astype image and turn to float
20-
fImg = img.astype(numpy.float32)
21-
fImg = fImg / 255.0
10+
adjusted_img = (img - 127.5 * (1 - B)) * k + 127.5 * (1 + B)
11+
return np.clip(adjusted_img, 0, 255).astype(np.uint8)
2212

23-
# color space exchange BGR -> HLS
13+
def saturation_and_lightness(img, lightness, saturation):
14+
fImg = img.astype(np.float32) / 255.0
2415
hlsImg = cv2.cvtColor(fImg, cv2.COLOR_BGR2HLS)
25-
hlsCopy = numpy.copy(hlsImg)
26-
27-
# lightness = 0 # lightness edited to "1 +/- n %"
28-
# saturation = 300 # saturation edited to "1 +/- n %"
29-
30-
# brightness
31-
hlsCopy[:, :, 1] = (1 + lightness / 100.0) * hlsCopy[:, :, 1]
32-
hlsCopy[:, :, 1][hlsCopy[:, :, 1] > 1] = 1 # Between 0-1
3316

34-
# saturation
35-
hlsCopy[:, :, 2] = (1 + saturation / 100.0) * hlsCopy[:, :, 2]
36-
hlsCopy[:, :, 2][hlsCopy[:, :, 2] > 1] = 1 # Between 0-1
17+
# 調整亮度和飽和度
18+
hlsImg[:, :, 1] = np.clip(hlsImg[:, :, 1] * (1 + lightness / 100.0), 0, 1)
19+
hlsImg[:, :, 2] = np.clip(hlsImg[:, :, 2] * (1 + saturation / 100.0), 0, 1)
3720

38-
# color space exchange back HLS -> BGR
39-
result_img = cv2.cvtColor(hlsCopy, cv2.COLOR_HLS2BGR)
40-
result_img = ((result_img * 255).astype(numpy.uint8))
41-
return result_img
21+
result_img = (cv2.cvtColor(hlsImg, cv2.COLOR_HLS2BGR) * 255).astype(np.uint8)
22+
return result_img

script/display_image.py

Lines changed: 50 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,26 @@
77
class Display_image:
88
def __init__(self, width=500, height=500):
99
pygame.init()
10+
self.new_x, self.new_y = 0, 0
11+
self.scale_rate = 1
12+
self.image_drag = False
1013
self.display_screen_resize(width, height)
1114
pygame.display.set_caption("Display Screen")
12-
pygame.display.set_icon(pygame.image.load(resource_path("assets\icon\icon.png")))
15+
pygame.display.set_icon(pygame.image.load(resource_path("assets/icon/icon.png")))
1316

1417
self.limit_size = [800, 600]
15-
self.or_image = pygame.image.load(resource_path(sample_image_path)).convert_alpha()
16-
self.image = pygame.image.load(resource_path(sample_image_path)).convert_alpha()
17-
self.new_x = 0
18-
self.new_y = 0
19-
self.scale_rate = 1
18+
self.image_path = resource_path(sample_image_path)
19+
self.load_initial_image()
20+
21+
def load_initial_image(self):
22+
self.or_image = pygame.image.load(self.image_path).convert_alpha()
23+
self.image = self.or_image.copy()
2024
self.scale_image()
21-
self.image_drag = False
2225

2326
def image_load(self, image_path):
24-
image_path.replace("\\", "/")
25-
file_name = re.split("/", image_path)[-1]
26-
file_format = file_name.split('.')[-1]
27-
if not file_format in ['mp4', 'avi', 'flv']:
28-
self.or_image = pygame.image.load(image_path)
27+
image_path = image_path.replace("\\", "/")
28+
if not image_path.split('.')[-1] in ['mp4', 'avi', 'flv']:
29+
self.or_image = pygame.image.load(image_path).convert_alpha()
2930
self.scale_image()
3031

3132
def display_screen_resize(self, width=10, height=10, mode=0):
@@ -36,74 +37,58 @@ def display_screen_resize(self, width=10, height=10, mode=0):
3637
self.display_screen = pygame.display.set_mode(self.image.get_size())
3738

3839
def image_resize_limit(self):
39-
self_image_size = self.image.get_size()
40-
x_rate = 1
41-
y_rate = 1
42-
new_rate = 1
43-
if self_image_size[0] > self.limit_size[0]:
44-
x_rate = self.limit_size[0] / self_image_size[0]
45-
if self_image_size[1] > self.limit_size[1]:
46-
y_rate = self.limit_size[1] / self_image_size[1]
47-
new_rate = min(x_rate, y_rate)
48-
self.or_scale_rate = new_rate
49-
self.image = pygame.transform.scale(self.or_image, (self_image_size[0]*new_rate, self_image_size[1]*new_rate))
40+
img_size = self.image.get_size()
41+
x_rate = self.limit_size[0] / img_size[0] if img_size[0] > self.limit_size[0] else 1
42+
y_rate = self.limit_size[1] / img_size[1] if img_size[1] > self.limit_size[1] else 1
43+
self.scale_rate = min(x_rate, y_rate)
44+
self.image = pygame.transform.scale(self.or_image, (int(img_size[0] * self.scale_rate), int(img_size[1] * self.scale_rate)))
5045
self.scale_image()
5146

5247
def cv_to_pygame(self, cv_img):
53-
frame = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)
54-
frame = cv2.transpose(frame)
55-
frame = pygame.surfarray.make_surface(frame)
56-
self.or_image = frame
48+
rgb_img = cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB)
49+
self.or_image = pygame.surfarray.make_surface(rgb_img.swapaxes(0, 1))
5750
self.scale_image()
5851

5952
def display_update(self):
6053
self.display_screen.fill('black')
61-
if self.display_screen.get_size() != self.image.get_size():
62-
self.display_screen_resize(mode=1)
6354
self.display_screen.blit(self.scaled_image, self.scaled_image_rect)
6455
pygame.display.update()
6556

6657
def scale_image(self):
67-
image_size = self.image.get_size()
68-
self.scaled_image = pygame.transform.scale(self.or_image, (image_size[0]*self.scale_rate, image_size[1]*self.scale_rate))
69-
self.scaled_image_rect = self.scaled_image.get_rect(topleft = (self.new_x, self.new_y))
58+
img_size = self.image.get_size()
59+
self.scaled_image = pygame.transform.scale(self.or_image, (int(img_size[0] * self.scale_rate), int(img_size[1] * self.scale_rate)))
60+
self.scaled_image_rect = self.scaled_image.get_rect(topleft=(self.new_x, self.new_y))
61+
62+
def handle_events(self):
63+
for event in pygame.event.get():
64+
if event.type == pygame.QUIT:
65+
self.quit()
66+
elif event.type == pygame.MOUSEBUTTONDOWN:
67+
if event.button == 1 and self.scaled_image_rect.collidepoint(event.pos):
68+
self.image_drag = True
69+
elif event.button == 2:
70+
self.reset_image()
71+
elif event.button == 4:
72+
self.scale_rate += 0.1
73+
self.scale_image()
74+
elif event.button == 5:
75+
self.scale_rate = max(0.1, self.scale_rate - 0.1)
76+
self.scale_image()
77+
elif event.type == pygame.MOUSEBUTTONUP and event.button == 1:
78+
self.image_drag = False
79+
elif event.type == pygame.MOUSEMOTION and self.image_drag:
80+
self.scaled_image_rect.move_ip(event.rel)
81+
self.new_x, self.new_y = self.scaled_image_rect.topleft
82+
83+
def reset_image(self):
84+
self.new_x, self.new_y, self.scale_rate = 0, 0, 1
85+
self.scale_image()
7086

7187
def run(self):
7288
while True:
73-
for event in pygame.event.get():
74-
if event.type == pygame.QUIT:
75-
self.quit()
76-
elif event.type == pygame.MOUSEBUTTONDOWN:
77-
if event.button == 1:
78-
if self.scaled_image_rect.collidepoint(event.pos):
79-
self.image_drag = True
80-
elif event.button == 2:
81-
self.new_x = 0
82-
self.new_y = 0
83-
self.scale_rate = 1
84-
self.scale_image()
85-
elif event.button == 4:
86-
self.scale_rate += 0.1
87-
self.scale_image()
88-
elif event.button == 5:
89-
self.scale_rate -= 0.1
90-
if self.scale_rate < 0:
91-
self.scale_rate = 0
92-
self.scale_image()
93-
# 1 - left click
94-
# 2 - middle click
95-
# 3 - right click
96-
# 4 - scroll up
97-
# 5 - scroll down
98-
elif event.type == pygame.MOUSEBUTTONUP:
99-
self.image_drag = False
100-
if event.type == pygame.MOUSEMOTION:
101-
if self.image_drag:
102-
self.scaled_image_rect.move_ip(event.rel)
103-
self.new_x = self.scaled_image_rect[0]
104-
self.new_y = self.scaled_image_rect[1]
89+
self.handle_events()
10590
self.display_update()
10691

10792
def quit(self):
10893
pygame.quit()
109-
sys.exit()
94+
sys.exit()

script/gif_process.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,6 @@ def gif_edit(path, set_dict):
1919
img_list = []
2020
for frame in ImageSequence.Iterator(gif):
2121
process.update(1)
22-
# frame = frame.convert('RGBA')
23-
# opencv_img = np.array(frame, dtype=np.uint8)
24-
# opencv_img = cv2.cvtColor(opencv_img, cv2.COLOR_RGBA2BGRA)
25-
26-
# edit area
2722
frame = transform(frame, set_dict)
2823

2924
cv2.imshow('frame_rendering', frame)

script/gui_helper_new.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,14 @@ def only_digit(self, input_str):
5252
elif input_str[0] == '+' or input_str[0] == '-' or str.isdigit(input_str[0]):
5353
str_len = len(input_str)
5454
cmp_str = input_str[1:str_len]
55-
# print(cmp_str)
5655
if str.isdigit(cmp_str) or cmp_str == '':
5756
return True
5857
else:
5958
return False
60-
# elif str.isdigit(input_str) or input_str == '':
61-
# return True
6259
else:
6360
return False
6461

6562
def switch_frame(self, index):
66-
# new_frame = frame_class(self)
67-
# if self.frame is not None:
68-
# self.frame.destroy()
69-
# del self.frame
70-
# self.frame.kill()
7163
if self.frame is not None:
7264
self.frame.grid_forget()
7365
self.frame_index = index

script/main.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
from pixel_converter import *
22
from gui_helper_new import *
33
from display_image import Display_image
4+
from threading import Thread
5+
6+
def gui_run(display):
7+
gui_helper = Gui_helper_main(display)
8+
gui_helper.run()
49

510
if __name__ == '__main__':
611
display = Display_image()
7-
from threading import Thread
8-
def gui_run():
9-
gui_help = Gui_helper_main(display)
10-
gui_help.run()
11-
thread1 = Thread(target=gui_run)
12-
thread1.setDaemon(True)
12+
thread1 = Thread(target=gui_run, args=(display,), daemon=True)
1313
thread1.start()
14-
display.run()
14+
display.run()

0 commit comments

Comments
 (0)