Abstract: You may mix photographs represented within the type of Numpy arrays utilizing the concatenate
perform of the Numpy library as np.concatenate((numpydata_1, numpydata_2), axis=1)
. This combines the pictures horizontally. Use syntax: np.concatenate((numpydata_1, numpydata_2), axis=0)
to mix the pictures vertically.
Downside Formulation
Take into account you’ve two photographs represented as Numpy arrays of pixels. How will you mix the 2 photographs represented within the type of Numpy pixel arrays?
Combining two photographs which are within the type of Numpy arrays will create a brand new Numpy array having pixels that may signify a brand new mixed picture shaped by both concatenating the 2 photographs horizontally or vertically. Let’s perceive this with the assistance of an instance:
Given: Let’s say now we have two completely different photographs as given under (Each photographs have comparable dimensions) –
Whenever you convert them to Numpy arrays that is how one can signify the 2 photographs:
numpydata_1 | numpydata_2 |
[[[184 186 201] [184 186 201] [184 187 202] … [174 189 218] [174 189 218] [173 188 217]] [[184 186 201] [[183 186 203] … [[ 43 64 55] [[ 49 70 61] [[ 53 74 65] |
[[[255 255 255] [255 255 255] [255 255 255] … [242 245 252] [240 243 250] [241 244 251]] [[255 255 255] [[255 255 255] … [[115 152 144] [[ 75 118 108] [[ 42 90 78] |
Problem: Mix the 2 photographs – (i) horizontally (ii) vertically
Anticipated Output:
Horizontal Mixture | Vertical Mixture |
[[[184 186 201] [184 186 201] [184 187 202] … [242 245 252] [240 243 250] [241 244 251]] [[184 186 201] [184 186 201] [184 187 202] … [242 245 252] [241 244 251] [241 244 251]] [[183 186 203] [183 186 203] [184 187 204] … [243 246 253] [243 246 253] [241 244 251]] … [[ 43 64 55] [ 45 66 57] [ 48 69 60] … [ 72 108 106] [ 73 109 107] [ 77 113 111]] [[ 49 70 61] [ 50 71 62] [ 53 73 64] … [ 69 104 100] [ 69 104 100] [ 71 106 102]] [[ 53 74 65] [ 52 73 64] [ 56 73 65] … [ 65 97 94] [ 60 92 89] [ 64 96 93]]] |
[[[184 186 201] [184 186 201] [184 187 202] … [174 189 218] [174 189 218] [173 188 217]] [[184 186 201] [184 186 201] [184 187 202] … [174 189 218] [173 188 217] [173 188 217]] [[183 186 203] [183 186 203] [184 187 204] … [173 188 217] [173 188 217] [172 187 216]] … [[115 152 144] [111 151 142] [ 96 142 131] … [ 72 108 106] [ 73 109 107] [ 77 113 111]] [[ 75 118 108] [ 79 125 114] [ 82 132 120] … [ 69 104 100] [ 69 104 100] [ 71 106 102]] [[ 42 90 78] [ 47 97 85] [ 64 116 103] … [ 65 97 94] [ 60 92 89] [ 64 96 93]]] |
So, are you up for the problem? Properly! If it seems daunting – don’t fear. This tutorial will information you thru the strategies to unravel the programming problem. So, with out additional delay allow us to dive into the answer.
Prerequisite: To grasp how the options to comply with work it’s important to know – “The way to concatenate two Numpy arrays in Python.”
NumPy’s concatenate()
technique joins a sequence of arrays alongside an current axis. The primary couple of comma-separated array arguments are joined. Should you use the axis argument, you possibly can specify alongside which axis the arrays must be joined. For instance, np.concatenate(a, b, axis=0)
joins arrays alongside the primary axis and np.concatenate(a, b, axis=None)
joins the flattened arrays.
To study extra about concatenating arrays in Python, right here’s a beautiful tutorial that may information you thru quite a few strategies of doing so: The way to Concatenate Two NumPy Arrays?
Mix Photos “Horizontally” with Numpy
Strategy: The concatenate()
technique of the Numpy library permits you mix matrices of various photographs alongside completely different axes. To mix the 2 picture arrays horizontally, you could specify the axis=1.
Code: Please undergo the feedback talked about within the script to be able to perceive how every line of code works.
from PIL import Picture import numpy as np # Studying the given photographs img_1 = Picture.open('img_1.JPG') img_2 = Picture.open('img_2.JPG') # Changing the 2 photographs into Numpy Arrays numpydata_1 = np.asarray(img_1) numpydata_2 = np.asarray(img_2) # Combining the 2 photographs horizontally horizontal = np.concatenate((numpydata_1, numpydata_2), axis=1) # Show the horizontally mixed picture as a Numpy Array print(horizontal) # changing the mixed picture within the Numpy Array kind to a picture format information = Picture.fromarray(horizontal) # Saving the mixed picture information.save('combined_pic.png')
Output:
[[[184 186 201] [184 186 201] [184 187 202] ... [242 245 252] [240 243 250] [241 244 251]] [[184 186 201] [184 186 201] [184 187 202] ... [242 245 252] [241 244 251] [241 244 251]] [[183 186 203] [183 186 203] [184 187 204] ... [243 246 253] [243 246 253] [241 244 251]] ... [[ 43 64 55] [ 45 66 57] [ 48 69 60] ... [ 72 108 106] [ 73 109 107] [ 77 113 111]] [[ 49 70 61] [ 50 71 62] [ 53 73 64] ... [ 69 104 100] [ 69 104 100] [ 71 106 102]] [[ 53 74 65] [ 52 73 64] [ 56 73 65] ... [ 65 97 94] [ 60 92 89] [ 64 96 93]]]
Right here’s how the horizontally mixed picture seems like when saved to a file:
Great! Isn’t it?
Mix Photos “Vertically” with Numpy
Within the earlier answer, we mixed the pictures horizontally. On this soution you’ll discover ways to mix two photographs represented within the type of Numpy arrays vertically.
Strategy: The thought is kind of just like the earlier answer with the one distinction within the axis parameter of the concatenate()
technique. To mix the 2 picture arrays vertically, you could specify the axis=0.
Code:
from PIL import Picture import numpy as np # Studying the given photographs img_1 = Picture.open('img_1.JPG') img_2 = Picture.open('img_2.JPG') # Changing the 2 photographs into Numpy Arrays numpydata_1 = np.asarray(img_1) numpydata_2 = np.asarray(img_2) # Combining the 2 photographs horizontally vertical = np.concatenate((numpydata_1, numpydata_2), axis=0) # Show the vertically mixed picture as a Numpy Array print(vertical) # changing the mixed picture within the Numpy Array kind to a picture format information = Picture.fromarray(vertical) # Saving the mixed picture information.save('combined_pic.png')
Output:
[[[184 186 201] [184 186 201] [184 187 202] ... [174 189 218] [174 189 218] [173 188 217]] [[184 186 201] [184 186 201] [184 187 202] ... [174 189 218] [173 188 217] [173 188 217]] [[183 186 203] [183 186 203] [184 187 204] ... [173 188 217] [173 188 217] [172 187 216]] ... [[115 152 144] [111 151 142] [ 96 142 131] ... [ 72 108 106] [ 73 109 107] [ 77 113 111]] [[ 75 118 108] [ 79 125 114] [ 82 132 120] ... [ 69 104 100] [ 69 104 100] [ 71 106 102]] [[ 42 90 78] [ 47 97 85] [ 64 116 103] ... [ 65 97 94] [ 60 92 89] [ 64 96 93]]]
Right here’s how the horizontally mixed picture seems like when saved to a file:
Hurrah! We have now efficiently mixed the 2 photographs vertically.
Workouts
Earlier than we wrap this tutorial, right here’s a set of challenges to additional improve your data.
Problem 1: Take into account that you’ve been given a picture. How will you change this picture to a Numpy array?
Given Picture
Answer:
from PIL import Picture from numpy import asarray img = Picture.open('img.png') img_to_array = asarray(img) print(img_to_array)
Problem 2: Take into account that you’ve two photographs of various dimensions. How will you mix the 2 photographs horizontally utilizing OpenCV?
Given Photos:
Answer:
import cv2 import numpy as np img_1 = cv2.imread('Imgage_1.png') img_2 = cv2.imread('Image_2.png') h1, w1 = img_1.form[:2] h2, w2 = img_2.form[:2] img_3 = np.zeros((max(h1, h2), w1 + w2, 3), dtype=np.uint8) img_3[:, :] = (255, 255, 255) img_3[:h1, :w1, :3] = img_1 img_3[:h2, w1:w1 + w2, :3] = img_2 cv2.imwrite('Img_3.png', img_3)
Output:
Wish to find out about OpenCV? Right here’s an incredible tutorial to get you began with OpenCV – Python OpenCV Picture Processing.
Conclusion
Phew! That was some coding problem! I hope now you can efficiently mix photographs given as Numpy arrays in each dimensions – horizontally in addition to vertically. With that we come to the top of this tutorial. Please subscribe and keep tuned for extra attention-grabbing tutorials and options sooner or later.
Completely satisfied coding! 🙂