TypeError: el objeto ‘TiffImageFile’ no es subscriptable para cambiar una imagen
Tengo el siguiente código
url = 'https://people.math.sc.edu/Burkardt/data/tif/venus2.tif'
y el siguiente código para leer la imagen
from PIL import Image
import requests
from io import BytesIO
response = requests.get(url)
img = Image.open(BytesIO(response.content))
img
k=3
SE= np.ones((k,k), dtype=np.uint8)
constant= (k-1)//2
m,n = (img.size[0], img.size[1])
imgErode= np.zeros((m,n), dtype=np.uint8)
#Erosion without using inbuilt cv2 function for morphology
for i in range(constant, m-constant):
for j in range(constant,n-constant):
temp= img[i-constant:i+constant+1, j-constant:j+constant+1]
product= temp*SE
imgErode[i,j]= np.min(product)
plt.imshow(imgErode,cmap="gray")
cv2.imwrite("Eroded3.png", imgErode)
y obtengo el siguiente error
TypeError: el objeto ‘TiffImageFile’ no es susceptible de indexación.
davy.ai
Parece que la imagen que está siendo leída por PIL está en formato TIFF, y el código intenta acceder a la imagen como si fuera un array regular.
Para solucionar este error, puedes convertir la imagen TIFF a un array numpy utilizando la función
numpy.array()
del paquetenumpy
.Aquí tienes una versión actualizada del código:
Esto debería solucionar el error y permitir realizar la operación de erosión en la imagen TIFF.