Confronto tra immagini e aree modificate

1

Sto cercando un modo efficace per confrontare 2 immagini e ottenere le aree modificate come risultato.

Il mio attuale tentativo ha i seguenti passaggi:

  1. Confronta ogni linea orizzontale e mantieni l'indice di linea modificato in un elenco
  2. Confronta ogni riga verticale e mantieni l'indice di linea modificato in un elenco
  3. Esegui l'iterazione su ogni linea orizzontale modificata, individuando ciascun punto iniziale e finale dell'altezza mentre iterazione sulle linee delle modifiche verticali trovando la larghezza dell'area.

Questo metodo ha i suoi difetti e sembra non molto veloce.

Uno dei difetti è che se ci sono 2 aree modificate su una diagonale, questo metodo rileva 4 aree modificate. tuttavia questa piccola anomalia non è un problema per il mio caso d'uso.

Esistono metodi più efficienti? Stavo pensando, in che modo VNC o TeamViewer rileva i cambiamenti di schermo?

L'idea è che ci sia un'immagine di base. Un utente disegna (non in applicazione) ulteriori dettagli su di esso. Voglio confrontare queste immagini e trovare dove l'utente ha disegnato ulteriori dettagli.

    
posta eKKiM 15.12.2016 - 16:59
fonte

2 risposte

2

Salirei sullo stack overflow e cercherò nelle aree OpenCV e di elaborazione delle immagini lì. Ho usato opencv per fare qualcosa di simile. È possibile fare una differenza di immagine efficiente eseguendo una sottrazione opencv su due immagini. Quindi si trasforma l'output di quel passo in un'immagine monocolore e si contano i pixel che superano un valore di soglia (per tenere conto delle variazioni minime nelle immagini). Buona fortuna!

    
risposta data 16.12.2016 - 03:33
fonte
1

La tua descrizione sembra che tu stia facendo una sorta di annotazione sopra un'immagine esistente. Simile alle nuove funzionalità di Microsoft Edge in cui è possibile inserire commenti sulla parte superiore di una pagina Web.

Il modo più semplice per farlo nello scenario è catturare tutti i disegni degli utenti in un buffer separato dietro le quinte con uno sfondo trasparente. Quindi componi le due immagini per la visualizzazione all'utente sullo schermo disegnando prima l'immagine di sfondo, quindi disegna le modifiche dell'utente sopra. Poiché il buffer delle modifiche ha uno sfondo trasparente, l'immagine di sfondo verrà visualizzata.

Utilizzando questo metodo, non avrai bisogno di separare le modifiche dell'utente, saranno già nel loro buffer.

    
risposta data 16.12.2016 - 04:02
fonte

Leggi altre domande sui tag