From 632891efba654b74ed153518069e8b5494c676b7 Mon Sep 17 00:00:00 2001 From: Mateusz Zawadzki Date: Thu, 16 Apr 2020 10:26:03 +0200 Subject: [PATCH 1/7] Add sepia tone --- digital_image_processing/sepia.py | 53 +++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 digital_image_processing/sepia.py diff --git a/digital_image_processing/sepia.py b/digital_image_processing/sepia.py new file mode 100644 index 000000000000..00e0c24f0854 --- /dev/null +++ b/digital_image_processing/sepia.py @@ -0,0 +1,53 @@ +""" + Implemented an algorithm using opencv to tone an image with sepia technic +""" + +from cv2 import imread, imshow, waitKey, destroyAllWindows + + +def make_sepia(img, factor: int): + pixel_h, pixel_v = img.shape[0], img.shape[1] + + def to_grayscale(blue, green, red): + """ + Helper function to create pixel's greyscale representation + Src: https://pl.wikipedia.org/wiki/YUV + """ + return 0.2126 * red + 0.587 * green + 0.114 * blue + + def normalize(value): + """ Helper function to normalize R/G/B value -> return 255 if value > 255""" + return value if value <= 255 else 255 + + for i in range(pixel_h): + for j in range(pixel_v): + greyscale = int(to_grayscale(*img[i][j])) + img[i][j] = [ + normalize(greyscale), + normalize(greyscale + factor), + normalize(greyscale + 2 * factor), + ] + + return img + + +if __name__ == "__main__": + # read original image + img = imread("image_data/lena.jpg", 1) + img1 = imread("image_data/lena.jpg", 1) + img2 = imread("image_data/lena.jpg", 1) + img3 = imread("image_data/lena.jpg", 1) + + # convert with sepia with different factor's value + sepia_10 = make_sepia(img, 10) + sepia_20 = make_sepia(img1, 20) + sepia_30 = make_sepia(img2, 30) + sepia_40 = make_sepia(img3, 40) + + # show result images + imshow("Original image with sepia (factor: 10)", img) + imshow("Original image with sepia (factor: 20)", img1) + imshow("Original image with sepia (factor: 30)", img2) + imshow("Original image with sepia (factor: 40)", img3) + waitKey(0) + destroyAllWindows() From 4c4df38ee3b6d8ed81a1d8b1add04a498467b7da Mon Sep 17 00:00:00 2001 From: Mateusz Zawadzki Date: Thu, 16 Apr 2020 10:54:38 +0200 Subject: [PATCH 2/7] Add unit test --- digital_image_processing/sepia.py | 1 + digital_image_processing/test_digital_image_processing.py | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/digital_image_processing/sepia.py b/digital_image_processing/sepia.py index 00e0c24f0854..1c5d551420c3 100644 --- a/digital_image_processing/sepia.py +++ b/digital_image_processing/sepia.py @@ -6,6 +6,7 @@ def make_sepia(img, factor: int): + """ Function create sepia tone. Source: https://en.wikipedia.org/wiki/Sepia_(color) """ pixel_h, pixel_v = img.shape[0], img.shape[1] def to_grayscale(blue, green, red): diff --git a/digital_image_processing/test_digital_image_processing.py b/digital_image_processing/test_digital_image_processing.py index b9a7211109a8..5c6127337599 100644 --- a/digital_image_processing/test_digital_image_processing.py +++ b/digital_image_processing/test_digital_image_processing.py @@ -9,6 +9,7 @@ import digital_image_processing.filters.convolve as conv import digital_image_processing.change_contrast as cc import digital_image_processing.convert_to_negative as cn +import digital_image_processing.sepia as sp from cv2 import imread, cvtColor, COLOR_BGR2GRAY from numpy import array, uint8 from PIL import Image @@ -68,3 +69,8 @@ def test_median_filter(): def test_sobel_filter(): grad, theta = sob.sobel_filter(gray) assert grad.any() and theta.any() + + +def test_sepia(): + sepia = sp.make_sepia(img, 20) + assert sepia.all() From 9c402f0b2668d0b0a5f386290f574401aeb1e8ba Mon Sep 17 00:00:00 2001 From: Mateusz Zawadzki Date: Thu, 16 Apr 2020 10:56:41 +0200 Subject: [PATCH 3/7] technic --> technique --- digital_image_processing/sepia.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/digital_image_processing/sepia.py b/digital_image_processing/sepia.py index 1c5d551420c3..d7e2f5130040 100644 --- a/digital_image_processing/sepia.py +++ b/digital_image_processing/sepia.py @@ -1,5 +1,5 @@ """ - Implemented an algorithm using opencv to tone an image with sepia technic + Implemented an algorithm using opencv to tone an image with sepia technique """ from cv2 import imread, imshow, waitKey, destroyAllWindows From 0bc58aba492cc28af6c1e7433efbe66acbab7e77 Mon Sep 17 00:00:00 2001 From: mateuszz0000 <33598510+mateuszz0000@users.noreply.github.com> Date: Sun, 26 Apr 2020 10:30:38 +0200 Subject: [PATCH 4/7] Update digital_image_processing/sepia.py Co-Authored-By: Christian Clauss --- digital_image_processing/sepia.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/digital_image_processing/sepia.py b/digital_image_processing/sepia.py index d7e2f5130040..6452d6d57828 100644 --- a/digital_image_processing/sepia.py +++ b/digital_image_processing/sepia.py @@ -18,7 +18,7 @@ def to_grayscale(blue, green, red): def normalize(value): """ Helper function to normalize R/G/B value -> return 255 if value > 255""" - return value if value <= 255 else 255 + return min(value, 255) for i in range(pixel_h): for j in range(pixel_v): From 1c1c7a7e1f86541a548227cb020611eee47ac18d Mon Sep 17 00:00:00 2001 From: mateuszz0000 <33598510+mateuszz0000@users.noreply.github.com> Date: Sun, 26 Apr 2020 10:30:46 +0200 Subject: [PATCH 5/7] Update digital_image_processing/sepia.py Co-Authored-By: Christian Clauss --- digital_image_processing/sepia.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/digital_image_processing/sepia.py b/digital_image_processing/sepia.py index 6452d6d57828..a9b10255af89 100644 --- a/digital_image_processing/sepia.py +++ b/digital_image_processing/sepia.py @@ -34,16 +34,12 @@ def normalize(value): if __name__ == "__main__": # read original image - img = imread("image_data/lena.jpg", 1) - img1 = imread("image_data/lena.jpg", 1) - img2 = imread("image_data/lena.jpg", 1) - img3 = imread("image_data/lena.jpg", 1) - - # convert with sepia with different factor's value - sepia_10 = make_sepia(img, 10) - sepia_20 = make_sepia(img1, 20) - sepia_30 = make_sepia(img2, 30) - sepia_40 = make_sepia(img3, 40) + images = {percentage: imread("image_data/lena.jpg", 1) + for percentage in (10, 20, 30, 40)} + for i, percentage, img in enumerate(images.items()): + images[i] = make_sepia(img, percentage) + for i, percentage, img in enumerate(images.items()): + imshow(f"Original image with sepia (factor: {percentage})", img) # show result images imshow("Original image with sepia (factor: 10)", img) From 696d8164d699a11bfee7d8b867f17bc982837169 Mon Sep 17 00:00:00 2001 From: Mateusz Zawadzki Date: Sun, 26 Apr 2020 10:48:01 +0200 Subject: [PATCH 6/7] Fixed errors after commit changes --- digital_image_processing/sepia.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/digital_image_processing/sepia.py b/digital_image_processing/sepia.py index a9b10255af89..552b1effc810 100644 --- a/digital_image_processing/sepia.py +++ b/digital_image_processing/sepia.py @@ -34,17 +34,15 @@ def normalize(value): if __name__ == "__main__": # read original image - images = {percentage: imread("image_data/lena.jpg", 1) - for percentage in (10, 20, 30, 40)} + images = { + percentage: imread("image_data/lena.jpg", 1) for percentage in (10, 20, 30, 40) + } + for i, percentage, img in enumerate(images.items()): images[i] = make_sepia(img, percentage) + for i, percentage, img in enumerate(images.items()): imshow(f"Original image with sepia (factor: {percentage})", img) - # show result images - imshow("Original image with sepia (factor: 10)", img) - imshow("Original image with sepia (factor: 20)", img1) - imshow("Original image with sepia (factor: 30)", img2) - imshow("Original image with sepia (factor: 40)", img3) waitKey(0) destroyAllWindows() From 52a3e8f7fd56f21763922bd6478bc8a0ab5c61dd Mon Sep 17 00:00:00 2001 From: Mateusz Zawadzki Date: Sun, 26 Apr 2020 10:59:53 +0200 Subject: [PATCH 7/7] Fixed errors --- digital_image_processing/sepia.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/digital_image_processing/sepia.py b/digital_image_processing/sepia.py index 552b1effc810..e91d57d0379c 100644 --- a/digital_image_processing/sepia.py +++ b/digital_image_processing/sepia.py @@ -38,10 +38,10 @@ def normalize(value): percentage: imread("image_data/lena.jpg", 1) for percentage in (10, 20, 30, 40) } - for i, percentage, img in enumerate(images.items()): - images[i] = make_sepia(img, percentage) + for percentage, img in images.items(): + make_sepia(img, percentage) - for i, percentage, img in enumerate(images.items()): + for percentage, img in images.items(): imshow(f"Original image with sepia (factor: {percentage})", img) waitKey(0)