jdelange
jdelange

Reputation: 801

Python: extract a 2D array from a 3D array

I have a 3D numpy array (1L, 420L, 580L) the 2nd and 3rd dimension is a gray scale image that I want to display using openCV. How do I pull the 2D array from the 3D array?

I created a short routine to do this, but I bet there is a better way.

# helper function to remove 1st dimension
def pull_image(in_array):

    rows = in_array.shape[1]    # vertical
    cols = in_array.shape[2]    # horizontal

    out_array = np.zeros((rows, cols), np.uint8)    # create new array to hold image data

    for r in xrange(rows):
        for c in xrange(cols):            
            out_array[r, c] = in_array[:, r, c]
    return out_array

Upvotes: 2

Views: 14315

Answers (1)

Aaron
Aaron

Reputation: 11075

If you always only have the first dimension == 1, then you could simply reshape the array...

if in_array.shape[0] == 1:
    return in_array.reshape(in_array.shape[1:])

otherwise, you can use numpy's advanced list slicing...

else:
    return in_array[0,:,:]

Upvotes: 5

Related Questions