Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89

    C# riconoscere se un immagine è parte di un'altra immagine

    ho due immagini uguali, una la ritaglio e vorrei che il computer riconosca che l'immagine tagliata sia una parte di quell'altra immagine...
    ho realizzato questa funzione ma non capisco perchè non funziona...
    codice:
    public static bool ConfrontoImmagini(Bitmap imm1, Bitmap imm2) 
            {
    /*
    imm1 è l'immagine normale
    imm2 è l'immagine ritagliata
    */
                int w1 = imm1.Width, h1 = imm1.Height;
                int w2 = imm2.Width, h2 = imm2.Height;
    
    
                bool a = false;
                
                for (int wImm = 0; wImm != w1; wImm++) 
                {
                    for (int hImm = 0; hImm != h1; hImm++)
                    {
                        if ((w1 - wImm) - w2 >= 0 && (h1 - hImm) - h2 >= 0)
                        {
                            if (imm1.GetPixel(wImm, hImm) == imm2.GetPixel(0, 0))
                                for (int wImm2 = 0; wImm2 != w2; wImm2++)
                                {
                                    for (int hImm2 = 0; hImm2 != h2; hImm2++)
                                    {
                                        if (imm1.GetPixel(wImm + wImm2, hImm + hImm2) == imm2.GetPixel(wImm2, hImm2)) a = true;
                                        else { a = false; break; }
                                    }
                                    if (!a) break;
                                }
                        }
                        //else { wImm = w1; hImm = h1; }
                        if (a) break;
                    }
                    if (a) break;
                }
                return a;
            }
    Perchè non funziona?
    Grazie.

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89
    Dovrebbe funzionare perchè sto realizzando un programma nel quale ho bisogno di fare questa determinata cosa ...
    Ma visto che non capisco perchè non funziona chiedo se qualcuno lo sa...

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,254
    Non ha molto senso il tuo codice, ed è anche poco leggibile.

    A parte questo il tuo problema è molto più complesso.
    Domanda1: In che formato sono le immagini? jpg, bmp, o altro?
    Domanda2: il ritaglo può essere stato effettuato in ogni punto dell'immagine o solo in un punto preciso?

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Quote Originariamente inviata da Mood98 Visualizza il messaggio
    Dovrebbe funzionare perchè sto realizzando un programma nel quale ho bisogno di fare questa determinata cosa
    Questa non è una risposta.
    Se tu non spieghi il PERCHE' quel codice dovrebbe funzionare, non si va da nessuna parte.
    Spiegare significa argomentare il tuo codice (che è diverso dal dire qual è l'obiettivo finale).

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89
    1)Le immagini sono entrambe di formato .jpg
    2)Si il ritaglio può essere fatto in qualunque parte dell'immagine

    Quello che fa la funzione e di controllare tutti i colori dell'imm1 finché non trova lo stesso colore del primo punto dell'imm2, dopo di ché estrapolo la stessa dimensione dell'imm2 in imm1 e verifico se tutti colori sono uguali.

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    L'approccio non è corretto perché tu dai per scontato che il primo pixel di imm2 sia anche il primo di imm1, invece potrebbe anche non essere così.
    Riflettici...

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89
    Scusa ma credo di non aver capito, perchè la funzione controlla tutti i colori dell'imm1 dall'alto verso il basso e qualora trova il colore uguale al primo pixel di imm2 verifica se i prossimi colori di grandezza uguale a imm2 sono uguali...

  9. #9
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,994
    Quote Originariamente inviata da Mood98 Visualizza il messaggio
    ho realizzato questa funzione ma non capisco perchè non funziona...
    se l'hai realizzata tu spiegacela commentandola

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2016
    Messaggi
    89
    codice:
    publicstaticboolConfrontoImmagini(Bitmap imm1,Bitmap imm2) 
            {
    /*
    imm1 è l'immagine normale
    imm2 è l'immagine ritagliata
    */
                int w1 = imm1.Width, h1 = imm1.Height; // ottengo la larghezza dell'immagine sulla variabile w1, ottengo l'altezza dell'immagine su h1
                int w2 = imm2.Width, h2 = imm2.Height; // ottengo la larghezza dell'immagine sulla variabile w2, ottengo l'altezza dell'immagine su h2
    
    
                bool a =false;
                
                for(int wImm =0; wImm != w1; wImm++) // faccio un ciclo per controllare tutti i pixel in larghezza dell'immagine img1
                {
                    for(int hImm =0; hImm != h1; hImm++) // faccio un ciclo per controllare tutti i pixel in altezza dell'immagine img1
    {
                        if((w1 - wImm)- w2 >=0&&(h1 - hImm)- h2 >=0)  // se la grandezza in pixel dell'immagine img1 non controllata è almeno grande come l'immagine img2
                        {
                            if(imm1.GetPixel(wImm, hImm)== imm2.GetPixel(0,0)) // se il pixel di img1 nelle coordinate wImm hImm è uguale al primo pixel di img2
    for(int wImm2 =0; wImm2 != w2; wImm2++) // faccio due cicli per controllare se i pixel successivi sono uguali ad img2
                                {
                                    for(int hImm2 =0; hImm2 != h2; hImm2++)
                                    {
                                        if(imm1.GetPixel(wImm + wImm2, hImm + hImm2)== imm2.GetPixel(wImm2, hImm2)) a =true;
                                        else{ a =false;break;}
                                    }
                                    if(!a)break;
                                }
                        }
                        //else { wImm = w1; hImm = h1; }
                        if(a)break;
                    }
                    if(a)break;
                }
                return a;
            }
    se la fuzione restituisce true allora l'immagine è una parte dell'altra immagine, altrimenti no
    Ultima modifica di Mood98; 07-10-2017 a 12:28

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.