Spaces:
Sleeping
Sleeping
Commit
·
3d5d69a
1
Parent(s):
ad0c787
Refactor filters.py to add sketch effect and improve pixelization
Browse files- Added sketch effect filter
- Updated pixelize function formatting
- Improved dot effect filter spacing
- Ensured odd kernel size for blur
- Cleaned up code formatting and comments
- filters.py +36 -18
filters.py
CHANGED
|
@@ -2,10 +2,12 @@ import cv2
|
|
| 2 |
import numpy as np
|
| 3 |
from registry import registry
|
| 4 |
|
|
|
|
| 5 |
@registry.register("Original")
|
| 6 |
def original(image):
|
| 7 |
return image
|
| 8 |
|
|
|
|
| 9 |
@registry.register("Dot Effect", defaults={
|
| 10 |
"dot_size": 10,
|
| 11 |
"dot_spacing": 2,
|
|
@@ -78,6 +80,7 @@ def dot_effect(image, dot_size: int = 10, dot_spacing: int = 2, invert: bool = F
|
|
| 78 |
|
| 79 |
return canvas
|
| 80 |
|
|
|
|
| 81 |
@registry.register("Pixelize", defaults={
|
| 82 |
"pixel_size": 10,
|
| 83 |
}, min_vals={
|
|
@@ -103,39 +106,54 @@ def pixelize(image, pixel_size: int = 10):
|
|
| 103 |
# Resize the image to a smaller size
|
| 104 |
small_height = height // pixel_size
|
| 105 |
small_width = width // pixel_size
|
| 106 |
-
small_image = cv2.resize(
|
|
|
|
| 107 |
|
| 108 |
# Resize back to the original size with nearest neighbor interpolation
|
| 109 |
-
pixelized_image = cv2.resize(
|
|
|
|
| 110 |
|
| 111 |
return pixelized_image
|
| 112 |
|
| 113 |
-
|
| 114 |
-
|
|
|
|
| 115 |
}, min_vals={
|
| 116 |
-
"
|
| 117 |
}, max_vals={
|
| 118 |
-
"
|
| 119 |
}, step_vals={
|
| 120 |
-
"
|
| 121 |
})
|
| 122 |
-
def
|
| 123 |
"""
|
| 124 |
-
## Apply a
|
| 125 |
|
| 126 |
**Args:**
|
| 127 |
* `image` (numpy.ndarray): Input image (BGR or grayscale)
|
| 128 |
-
* `
|
| 129 |
|
| 130 |
**Returns:**
|
| 131 |
-
* `numpy.ndarray`:
|
| 132 |
"""
|
| 133 |
-
#
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 137 |
|
| 138 |
-
#
|
| 139 |
-
|
| 140 |
|
| 141 |
-
return
|
|
|
|
| 2 |
import numpy as np
|
| 3 |
from registry import registry
|
| 4 |
|
| 5 |
+
|
| 6 |
@registry.register("Original")
|
| 7 |
def original(image):
|
| 8 |
return image
|
| 9 |
|
| 10 |
+
|
| 11 |
@registry.register("Dot Effect", defaults={
|
| 12 |
"dot_size": 10,
|
| 13 |
"dot_spacing": 2,
|
|
|
|
| 80 |
|
| 81 |
return canvas
|
| 82 |
|
| 83 |
+
|
| 84 |
@registry.register("Pixelize", defaults={
|
| 85 |
"pixel_size": 10,
|
| 86 |
}, min_vals={
|
|
|
|
| 106 |
# Resize the image to a smaller size
|
| 107 |
small_height = height // pixel_size
|
| 108 |
small_width = width // pixel_size
|
| 109 |
+
small_image = cv2.resize(
|
| 110 |
+
image, (small_width, small_height), interpolation=cv2.INTER_LINEAR)
|
| 111 |
|
| 112 |
# Resize back to the original size with nearest neighbor interpolation
|
| 113 |
+
pixelized_image = cv2.resize(
|
| 114 |
+
small_image, (width, height), interpolation=cv2.INTER_NEAREST)
|
| 115 |
|
| 116 |
return pixelized_image
|
| 117 |
|
| 118 |
+
|
| 119 |
+
@registry.register("Sketch Effect", defaults={
|
| 120 |
+
"blur_kernel_size": 21,
|
| 121 |
}, min_vals={
|
| 122 |
+
"blur_kernel_size": 1,
|
| 123 |
}, max_vals={
|
| 124 |
+
"blur_kernel_size": 51,
|
| 125 |
}, step_vals={
|
| 126 |
+
"blur_kernel_size": 2,
|
| 127 |
})
|
| 128 |
+
def sketch_effect(image, blur_kernel_size: int = 21):
|
| 129 |
"""
|
| 130 |
+
## Apply a sketch effect to the image.
|
| 131 |
|
| 132 |
**Args:**
|
| 133 |
* `image` (numpy.ndarray): Input image (BGR or grayscale)
|
| 134 |
+
* `blur_kernel_size` (int): Size of the Gaussian blur kernel (must be odd)
|
| 135 |
|
| 136 |
**Returns:**
|
| 137 |
+
* `numpy.ndarray`: Sketch effect applied image
|
| 138 |
"""
|
| 139 |
+
# Ensure the kernel size is odd
|
| 140 |
+
if blur_kernel_size % 2 == 0:
|
| 141 |
+
blur_kernel_size += 1
|
| 142 |
+
|
| 143 |
+
# Convert the image to grayscale
|
| 144 |
+
if len(image.shape) == 3:
|
| 145 |
+
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
| 146 |
+
else:
|
| 147 |
+
gray = image
|
| 148 |
+
|
| 149 |
+
# Invert the grayscale image
|
| 150 |
+
inverted_gray = cv2.bitwise_not(gray)
|
| 151 |
+
|
| 152 |
+
# Apply Gaussian blur to the inverted image
|
| 153 |
+
blurred = cv2.GaussianBlur(
|
| 154 |
+
inverted_gray, (blur_kernel_size, blur_kernel_size), 0)
|
| 155 |
|
| 156 |
+
# Blend the grayscale image with the blurred inverted image
|
| 157 |
+
sketch = cv2.divide(gray, 255 - blurred, scale=256)
|
| 158 |
|
| 159 |
+
return sketch
|