Problema immagini

A
Alessio (670 points)
1 2 6
asked Nov 23, 2021 in Programmare in Python by Alessio (670 points)
closed Nov 23, 2021 by Alessio
Ciao a tutti, stavo riguardando la lezione 14 del professore e dopo aver definito le classi, il prof crea un'immagine. Fin qui tutto ok, ma appena scrivo sulla console images.visd(nome_immagine) mi escono diversi errori mai riscontrati prima. Come posso fare per risolvere?

images.visd(img)
Traceback (most recent call last):

  File "C:\anaconda\lib\png.py", line 1188, in from_array
    info['height'] = len(a)

TypeError: object of type 'Immagine' has no len()

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "C:\anaconda\lib\site-packages\IPython\core\formatters.py", line 345, in __call__
    return method()

  File "C:\anaconda\lib\images.py", line 47, in _repr_png_
    img = png.from_array(self.pixels, 'RGB')

  File "C:\anaconda\lib\png.py", line 1190, in from_array
    raise Error("len(a) does not work, supply info['height'] instead.")

Error: Error: len(a) does not work, supply info['height'] instead.

<images.Image at 0x2f265549ca0>
289 views
closed with note: Problema risolto

1 Answer

andrea.sterbini (172780 points)
514 935 1789
answered Nov 23, 2021 by andrea.sterbini (172,780 points)
images.visd vuole la matrice di terne

prima leggila

poi visualizzala
A
Alessio (670 points)
1 2 6
commented Nov 23, 2021 by Alessio (670 points)
L'immagine l'ho letta attraverso la funzione asTriples e poi utilizzo la funzione save dove la salvo utilizzando self.asTriples()
iacopomasi (2780 points)
13 20 41
commented Nov 24, 2021 by iacopomasi (2,780 points)

Se ti riferisci alla mia lezione 14 puoi semplicemente fare

import images

im = images.load('giotto_small.png')

images.visd(im)

Se ti riferisci alla mia lezione_17, dove la classe è più complicata, ho aggiornato lo zip perché c'èra un bug che preveniva la visualizzazione (passavo a viz l'oggetto ipd.Image ma in realtà basta passare il tipo ImageMat direttamente che ha in pancia il metodo _repr_png usato poi da ipd.display() e ho aggiornato il codice in maniera tale che sia piu conveniente.

Quindi puoi fare in due modi:

1. Plot su terminale Ipython semplicemente valutando l'oggetto (verrà invocato repr_png)

import image_proc_pkg as imp
im = imp.ImageMat.load_from_file('giotto_small.png')
im

2. Plot nel frame di spyder in  alto a sx (prendi il nuovo zip lezione_17.zip prima):

import image_proc_pkg as imp
im = imp.ImageMat.load_from_file('giotto_small.png')
im.visd() #quando visd viene chiamato chiama display che chiama repr_png che interamente converte oggetto in lista di liste di tuple

Ricordo che all'esame e HW potete usare solo la prima versione con

import images