Colorare i rettangoli e i bordi!

DavideM (260 points)
0 3 6
asked Dec 3, 2018 in Es1 by DavideM (260 points)
recategorized Dec 3, 2018 by andrea.sterbini
Ciao ragazzi!
Ho trovato tramite vertici i rettangoli all'interno di un'immagine.
Ho un dizionario con tutti i pixel bianchi e con le coordinate del pixel
Ho una lista con i vertici di un quadrato

Partendo dal vertice mi sposto sui bordi e cambio il colore nella tupla,ma come lo inserisco in un'immagine nuova se non ho tutte le coordinate dei pixel?
Lo stesso vale per l'interno.

Scusate per la poca chiarezza!

2 Answers

Best answer
a.capobianco1 (16770 points)
1 54 165
answered Dec 3, 2018 by a.capobianco1 (16,770 points)
selected Dec 3, 2018 by DavideM
Per colorare i rettangoli e i relativi bordi ti basta avere, per ogni rettangolo, le coordinate dei vertici in alto a sinistra e in basso a destra.

Per ogni coppia, fai un doppio ciclo for dove quello più esterno itera nel range dalla coordinata X del vertice in alto a sinistra alla X del vertice in basso a destra e il ciclo for interno itera nel range dalla coordinata Y del vertice in alto a sinistra alla coordinata Y del vertice in basso a destra.

quando la x è uguale alle due coordinate estreme (ovvero quelle di ogni punto) devi impostare il colore del bordo.

La stessa cosa vale anche per gli estremi delle coordinate Y.

Tutto il resto è rosso.
DavideM (260 points)
0 3 6
commented Dec 3, 2018 by DavideM (260 points)
Si, ma il modo di colorare lo so, ma non avendo le coordinate di ogni pixel nella matrice iniziale -> quella che si crea facendo immagini.load()
Non so come dire che quel pixel del bordo che ha coordinate,per esempio, (80,20) e tupla (255,255,255) deve essere cambiato nella matrice iniziale o in una nuova.
a.capobianco1 (16770 points)
1 54 165
commented Dec 3, 2018 by a.capobianco1 (16,770 points)
non ho capito bene.. non ti converrebbe lavorare direttamente sulla matrice/immagine scaricata in una variabile mediante il metodo load della classe immagini?

Una volta che hai accesso alla matrice, avendo le coordinate dei rettangoli (almeno questo è quello che ho capito io leggendoti) non ti resta che colorarli… ...altrimenti, se ho capito male, quali coordinate hai?
DavideM (260 points)
0 3 6
commented Dec 3, 2018 by DavideM (260 points)
Ho :

Una variabile x = immagini.load() che è una matrice con le tuple

Un dict di soli pixel bianchi  con coordinate come chiavi e tuple come valori

Una lista con i vertici dei rettangoli
a.capobianco1 (16770 points)
1 54 165
commented Dec 3, 2018 by a.capobianco1 (16,770 points)
Gli elementi della lista con i vertici dei rettangolo come sono? Puoi descrivere un elemento così mi faccio un'idea circa l'applicabilita del suggerimento?
a.capobianco1 (16770 points)
1 54 165
commented Dec 3, 2018 by a.capobianco1 (16,770 points)

io nella mia lista ho, per ogni elemento, una doppia tupla inserita in una tupla esterna es.di lista: [((X,Y),(X,Y)), ((X,Y),(X,Y)), ((X,Y),(X,Y)) ecc. ]

La prima tupla è il vertice in alto a sinistra e la seconda è quello in basso a destra.. per accedere ai singoli elementi della matrice immagine scrivo 

matrice[x][y] (dove la x e la y sono determinate nell'iterazione nel doppio for.. e li imposto il colore…

non so tu cosa intendi per lista di vertici…. in teoria basterebbe la lista e la matrice per colorare i rettangoli...

DavideM (260 points)
0 3 6
commented Dec 3, 2018 by DavideM (260 points)
x è la matrice con immagine.load()

il dict ha struttura {(0,0) : (255,255,255),(0,1) : (255,255,255)....etc}
 

la lista dei vertici è lst = [[(80,40),(80,20),(40,20),(40,10)],etc]

dove i vertici vanno da alto sinistra,alto destra,basso destra,basso sinistra
a.capobianco1 (16770 points)
1 54 165
commented Dec 3, 2018 by a.capobianco1 (16,770 points)
edited Dec 3, 2018 by a.capobianco1
Quindi la matrice ce l'hai. E dalla lista puoi estrapolare gli elementi dispari che alternativamente rappresenteranno il vertice in alto a sinistra e quello in basso a destra.... In teoria ti ho dato gli elementi per fare tutto...
Edit: è per colorare non ti servirebbe neanche il dizionario...
Riedit:ora che vedo meglio la tua lista è ancora più facile.. Per ogni elemento della lista esterna prendi dalla sottolista solo i vertici che ti interessano...
DavideM (260 points)
0 3 6
commented Dec 3, 2018 by DavideM (260 points)
Si ma la mia matrice è una lista del tipo [[(0,0,0),(0,0,0),(0,0,0),(0,0,0)..x100],[(0,0,0),(255,255,255),(255,255,255)...x100],...etc]]

Io non so quando e come cambiare la tupla alla coordinata (80,20) perchè nella matrice non c'è nessun riferimento alle coordinate
andrea.sterbini (172680 points)
511 927 1776
commented Dec 3, 2018 by andrea.sterbini (172,680 points)
Ma le sai usare le matrici?

img[y][x] = colore
DavideM (260 points)
0 3 6
commented Dec 3, 2018 by DavideM (260 points)
Questi sono gli effetti dopo una lunga giornata di programmazione. Grazie per l'aiuto
m
mel8 (1250 points)
0 12 19
answered Dec 3, 2018 by mel8 (1,250 points)
Il consiglio che ti posso dare è quello di evitare di lavorare con i dizionari ma di lavorare su una copia della matrice ed andare a colorare i bordi sulla copia
DavideM (260 points)
0 3 6
commented Dec 3, 2018 by DavideM (260 points)
Scusami, ma non ho capito