Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Problema immagini

A
Alessio (670 points)
1 2 6
in Programmare in Python by (670 points)
closed by
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>
464 views
closed with the note: Problema risolto

1 Answer

andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
images.visd vuole la matrice di terne

prima leggila

poi visualizzala
A
Alessio (670 points)
1 2 6
by (670 points)
L'immagine l'ho letta attraverso la funzione asTriples e poi utilizzo la funzione save dove la salvo utilizzando self.asTriples()
iacopomasi (5230 points)
45 64 94
by (5.2k 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