Я новичок в python, но пытаюсь следовать двум отдельным учебникам, которые я нашел в Интернете, которые демонстрируют, как обрезать изображение до квадрата, основываясь на соответствующей ширине и высоте изображения.Я пытаюсь получить центрированное обрезанное выходное изображение квадратного размера.
При первом методе в моем коде я получаю сообщение об ошибке:
square[(y-height)/2:y-(y-height)/2, (x-width)/2:x-(x-width)/2] = img
TypeError: slice indices must be integers or None or have an __index__ method
Вторым методомв моем коде я получаю сообщение об ошибке
img = img.resize((basewidth, hsize), PIL.Image.ANTIALIAS)
TypeError: 'tuple' object cannot be interpreted as an integer
Я студент-исследователь, который просто пытается выполнить небольшую задачу в очень большом проекте ИИ - поэтому мы не слишком сосредоточились на синтаксисе,Кто-нибудь сможет помочь мне запустить этот код и достичь желаемого результата?
import Aimports
import cv2
import PIL
import numpy as np
img = cv2.imread("working_image.jpg")
###FIRST OPTION
in_img = "working_image.jpg"
img = cv2.imread(in_img)
##get size
height, width, channels = img.shape
print (in_img,height, width, channels)
## Create a black image
x = height if height > width else width
y = height if height > width else width
square= np.zeros((x,y,3), np.uint8)
##
##This does the job
##
##print(x)
##print(y)
##print(height)
##print(width)
#
square[(y-height)/2:y-(y-height)/2, (x-width)/2:x-(x-width)/2] = img
#
#
cv2.imwrite('modified_image.jpg', square)
cv2.imshow('modified image', square)
cv2.imshow("original", img)
cv2.imshow("black square", square)
cv2.waitKey(0)
###SECOND OPTION
basewidth = 300.0
#print (img.shape)
#wpercent = (basewidth / float(img.size[0]))
wpercent = (basewidth / float(img.shape[0]))
#
#hsize = int((float(img.size[1]) * float(wpercent)))
hsize = int((float(img.shape[1]) * float(wpercent)))
#
img = img.resize((int(basewidth), hsize), PIL.Image.ANTIALIAS)
#
cv2.imwrite('modified_image.jpg', img)
#
cv2.imshow( "Image Output", img)
#imshow( "Image Output", img )
#The '& 0xFF' is supposedly to get it working on 64-bit machines
#cv2.waitKey(0) & 0xFF
cv2.waitKey(0)
cv2.destroyAllWindows()
#img.save(‘resized_image.jpg')