forked from TheAlgorithms/Python
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresize.py
72 lines (59 loc) · 2.17 KB
/
resize.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""Multiple image resizing techniques"""
importnumpyasnp
fromcv2importdestroyAllWindows, imread, imshow, waitKey
classNearestNeighbour:
"""
Simplest and fastest version of image resizing.
Source: https://en.wikipedia.org/wiki/Nearest-neighbor_interpolation
"""
def__init__(self, img, dst_width: int, dst_height: int):
ifdst_width<0ordst_height<0:
raiseValueError("Destination width/height should be > 0")
self.img=img
self.src_w=img.shape[1]
self.src_h=img.shape[0]
self.dst_w=dst_width
self.dst_h=dst_height
self.ratio_x=self.src_w/self.dst_w
self.ratio_y=self.src_h/self.dst_h
self.output=self.output_img= (
np.ones((self.dst_h, self.dst_w, 3), np.uint8) *255
)
defprocess(self):
foriinrange(self.dst_h):
forjinrange(self.dst_w):
self.output[i][j] =self.img[self.get_y(i)][self.get_x(j)]
defget_x(self, x: int) ->int:
"""
Get parent X coordinate for destination X
:param x: Destination X coordinate
:return: Parent X coordinate based on `x ratio`
>>> nn = NearestNeighbour(imread("digital_image_processing/image_data/lena.jpg",
... 1), 100, 100)
>>> nn.ratio_x = 0.5
>>> nn.get_x(4)
2
"""
returnint(self.ratio_x*x)
defget_y(self, y: int) ->int:
"""
Get parent Y coordinate for destination Y
:param y: Destination X coordinate
:return: Parent X coordinate based on `y ratio`
>>> nn = NearestNeighbour(imread("digital_image_processing/image_data/lena.jpg",
... 1), 100, 100)
>>> nn.ratio_y = 0.5
>>> nn.get_y(4)
2
"""
returnint(self.ratio_y*y)
if__name__=="__main__":
dst_w, dst_h=800, 600
im=imread("image_data/lena.jpg", 1)
n=NearestNeighbour(im, dst_w, dst_h)
n.process()
imshow(
f"Image resized from: {im.shape[1]}x{im.shape[0]} to {dst_w}x{dst_h}", n.output
)
waitKey(0)
destroyAllWindows()