Come trovo il primo e l'ultimo bit verde???

Franciscus (4830 points)
5 6 16
asked Nov 27, 2019 in HW6 obbligatorio by Franciscus (4,830 points)
Scusatemi,

nel mio programma scorro l'immagine con due for annidati e mi trovo una lista di liste con tutte le posizioni dei bit verdi; come faccio, però, a fermarmi al primo bit verde che incontro? E poi come posso fare la stessa cosa per trovare l'ultimo bit?
817 views

6 Answers

Best answer
Tommaso Sgroi (12990 points)
6 11 91
answered Nov 27, 2019 by Tommaso Sgroi (12,990 points)
edited Nov 29, 2019 by Tommaso Sgroi
Tramite 2 for (riga, colonna) e 3 while (brevi), con il primo for scorri le righe e appena trovi un pixel verde ti salvi le coordinate, dopodiché con il secondo for e il  primo while ti trovi la larghezza tra un pixel e l'altro, con il secondo scorri la lista dal pixel verde salvato per vedere quando finiscono i verdi, e con il terzo la scorri dal pixel verde che hai trovato con il while precedente in verticale finché non trovi l'ultimo pixel verde.
Ovviamente devi fare attenzione a gestire i controlli.

EDIT: ovviamente devi mettere un controllo che ti indichi se la riga che stai guardando è verde o no.
s
simone.lioy (1420 points)
23 30 39
commented Nov 29, 2019 by simone.lioy (1,420 points)
la tua spiegazione mi sta aiutando molto a farmi un schema di quello che devo fare, ma come faccio a trovarmi le righe e le colonne, perchè facendo len dell'immagine e len dell'immagine da [0] mi da sempre 150 ad entrambi e sono sicuro che c'è qualcosa di sbagliato perchè le coordinate dei punti verdi che trovo sono le stesse sia nell'asse delle x che delle y
Kobrax (3020 points)
6 18 27
commented Nov 29, 2019 by Kobrax (3,020 points)
Le dimensioni del file foto_1.png, come hai già detto tu, sono 150x150. Ma la griglia verde può essere posizionata a partire da qualsiasi punto nell'immagine. Se ci fai caso, le coordinate (x, y) del primo punto verde effettivamente sono uguali, questo perché il punto è posizionato alla stessa distanza dall'inizio dell'immagine andando avanti di x righe e y colonne. Quindi non c'è nulla di sbagliato nel calcolo
s
simone.lioy (1420 points)
23 30 39
commented Nov 30, 2019 by simone.lioy (1,420 points)
va bene grazie mille, però sono riuscito a trovare solo 6 punti verdi sia nelle righe che nelle colonne e infatti è molto strano per che nella prima riga dovrebbero essere 8
Kobrax (3020 points)
6 18 27
commented Nov 30, 2019 by Kobrax (3,020 points)
Assicurati di scorrere prima per righe x, ovvero len(img), e poi per colonne y, ovvero len(img[0]). Quindi un punto sarà img[x][y]
fc-dev (16450 points)
12 20 34
answered Nov 27, 2019 by fc-dev (16,450 points)
Metti i due for per trovare il primo bit verde in una funzione, appena lo trovi fai return.
Per trovare l'ultimo basta che fai la stessa cosa, ma scorrendo l'immagine dal basso e andando da destra verso sinistra.
Franciscus (4830 points)
5 6 16
commented Nov 27, 2019 by Franciscus (4,830 points)
Ti ringrazio, e per scorrerla al contrario mi basta usare gli indici con -1 giusto?
F
Fra (2240 points)
4 4 7
commented Nov 27, 2019 by Fra (2,240 points)
Si, dei mettere il for i in range(punto di partenza, punto di fine, -1):
plm (18850 points)
7 15 118
answered Nov 27, 2019 by plm (18,850 points)
Basta fare un return, ma ti consiglierei ti lavorare sulla griglia, comunque dovresti scorrerti quasi tutto il file anche nel caso migliore con il metodo di fc-dev, però sicuramente è leggermente più veloce rispetto a controllare tutta l'immagine
Andrea Sanchietti (3100 points)
4 7 40
answered Nov 27, 2019 by Andrea Sanchietti (3,100 points)
basta un doppio for che scorre i pixel dell'immagine e che trova i primo pixel verde. dopo di che puoi fare la stessa cosa ma partendo dalla fine per trovarti l'ultimo
E
Edward (25950 points)
2 4 172
answered Nov 27, 2019 by Edward (25,950 points)
Per trovare il primo pixel verde ti conviene creare una funzione che fa return appena trova un pixel verde, scorrendo l'immagine dall'inizio alla fine.

Per trovare l'ultimo pixel verde puoi fare la stessa cosa, semplicemente devi partire dalla fine, ossia se H è l'altezza e W è la larghezza, devi partire dagli indici H-1 e W-1, sottraendo uno ogni volta.
Ti basta usare due for ed i parametri opzionali di range().
a
a.pietroluongo (11250 points)
15 38 131
answered Nov 27, 2019 by a.pietroluongo (11,250 points)
Non è necessario trovare l'ultimo pixel verde