Добавление черной рамки к изображениям в списке - PullRequest
0 голосов
/ 24 апреля 2020

Я прочитал некоторые изображения с кодом ниже. Эти изображения имеют разные размеры. Чтобы они были одинакового размера, я хотел бы добавить черную рамку вокруг изображений. Я нашел код для этого для одного изображения, но не для списка, как в моем случае.

import cv2
import numpy
import glob
import matplotlib.pyplot as plt
from PIL import Image, ImageOps

folders = glob.glob(r'path\to\images\*')
imagenames_list = []
for folder in folders:
    for f in glob.glob(folder+'/*.png'):
        imagenames_list.append(f)



read_images = []        

for image in imagenames_list:
    read_images.append(cv2.imread(image, cv2.IMREAD_GRAYSCALE))

Чтобы добавить черную рамку для одного изображения, я использовал этот код:

from PIL import Image 
import numpy as np 


old_im = Image.open('path/to/single/picture/*.png')
old_size = old_im.size
print(old_size)


new_size = (500, 500)
print(new_size)
new_im = Image.new("RGB", new_size)
x = int((new_size[0]-old_size[0])/2)
y = int((new_size[1]-old_size[1])/2)
new_im.paste(old_im, (x,y))

1 Ответ

2 голосов
/ 24 апреля 2020

Изображение, прочитанное OpenCV - это всего лишь numpy массива. Вы можете просто использовать numpy нарезку для копирования:

def makeborder(cv2img, new_width, new_height):
    '''
    cv2img: an image returned by cv2.imread()
    '''
    # gray scale or BGR/BGRA
    if len(cv2img.shape) == 2:
        new_shape = (new_height, new_width)
    else:
        new_shape = (new_height, new_width, cv2img.shape[-1])

    new_img = np.zeros(new_shape, dtype=cv2img.dtype)

    # compute the offsets, similar to your x & y
    offset_height = (new_height - cv2img.shape[0])//2
    offset_weight = (new_width - cv2img.shape[1])//2

    # should check offset_height >= 0 and offset_weight >= 0
    # but we skip here
    # ...

    # now we just use numpy slicing to copy
    new_img[offset_height:offset_height + cv2img.shape[0],
            offset_width: offset_width + cv2img.shape[1]] \
        = cv2img

    return new_img
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...