Как нарезать изображение на кусочки, не получая «TypeError: строковые индексы должны быть целыми числами» - PullRequest
0 голосов
/ 24 декабря 2018

Я получаю сообщение об ошибке:

"Ошибка типа: строковые индексы должны быть целыми числами"

при попытке обрезать изображение

Я пытаюсь написать функцию, которая обрезает прямоугольное изображение, чтобы сделать квадратное изображение по центру.

def squared_and_resized(img,resized_dim):
    image = cv2.imread(img)
    img_height,img_width = image.shape[:2]
    if (img_width > img_height):
            start_row = 0
            end_row = img_height
            start_col = math.floor((img_width - img_height) /2)
            end_col = math.floor((img_width + img_height) /2)
    else:
            start_col = 0
            end_col = img_width
            start_row = math.floor((img_height-img_width)/2)
            end_row = start_row + img_width

    squared_img = img[start_row:end_row , start_col:end_col]

    resized_img = cv2.resize(squared_img,(resized_dim, resized_dim))
    return resized_img

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Ошибка в строке: squared_img = img[start_row:end_row , start_col:end_col].При проверке кода кажется, что img имеет тип str, который передается этому методу и позже используется для нарезки изображения.Возможно, вам придется использовать squared_img = image[start_row:end_row , start_col:end_col]

Чтобы решить эту проблему в будущем, используйте значимые имена.В этом случае параметр метода может быть назван как image_path.

0 голосов
/ 24 декабря 2018

math.floor возвращает переменную типа float.Вы можете использовать int(math.floor((img_height-img_width)/2))

...