es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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 paquete numpy.

    Aquí tienes una versión actualizada del código:

    import numpy as np 
    from PIL import Image 
    import requests 
    from io import BytesIO 
    
    url = 'https://people.math.sc.edu/Burkardt/data/tif/venus2.tif'
    
    # Lee la imagen y conviértela en un array numpy 
    response = requests.get(url) 
    img = Image.open(BytesIO(response.content)) 
    img = np.array(img)
    
    k=3 
    SE= np.ones((k,k), dtype=np.uint8) 
    constant= (k-1)//2 
    
    m,n = (img.shape[0], img.shape[1]) 
    imgErode= np.zeros((m,n), dtype=np.uint8)
    
    # Erosión sin utilizar la función morfológica cv2 integrada 
    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)
    

    Esto debería solucionar el error y permitir realizar la operación de erosión en la imagen TIFF.

Comments are closed.