Help, I need to put a border on the image displayed from the code below. How do I do this? The code below pulls up the image, and now i need a border. Help.. All of this code is Python
# -*- coding: utf-8 -*- ''' LoganCaroline_1_4_7: Merge images ''' import matplotlib.pyplot as plt import os.path import numpy as np # “as” lets us use standard abbreviations '''Read the image data''' # Get the directory of this python script directory = os.path.dirname(os.path.abspath(__file__)) # Build an absolute filename from directory + filename filename = os.path.join(directory, 'family1.jpg') # Read the image data into an array img = plt.imread(filename) '''Show the image data''' # Create figure with 1 subplot fig, ax = plt.subplots(1, 1) # Show the image data in a subplot ax.imshow(img, interpolation='none') # Show the figure on the screen fig.show()
Advertisement
Answer
Just create a slightly larger array that is black and fill the central pixels with your image.
import numpy as np import matplotlib.pyplot as plt def frame_image(img, frame_width): b = frame_width # border size in pixel ny, nx = img.shape[0], img.shape[1] # resolution / number of pixels in x and y if img.ndim == 3: # rgb or rgba array framed_img = np.zeros((b+ny+b, b+nx+b, img.shape[2])) elif img.ndim == 2: # grayscale image framed_img = np.zeros((b+ny+b, b+nx+b)) framed_img[b:-b, b:-b] = img return framed_img img = np.random.rand(456, 333, 3) fig, (ax1, ax2) = plt.subplots(1,2) ax1.imshow(img, interpolation='none') ax2.imshow(frame_image(img, 20), interpolation='none') plt.show()