C# - Comparando Imagens


 Neste artigo vou apresentar um pequeno programa feito na linguagem C# que permite comparar se duas imagens são iguais.

Neste artigo vou apresentar uma aplicação Windows Forms para iniciantes na linguagem C# onde podemos carregar duas imagens e comparar se as imagens são iguais.

Recursos Usados

Criando o projeto Windows Forms

Vamos criar um projeto bem simples do tipo Windows Forms usando a linguagem C#.

No formulário Form1.cs inclua os seguintes controles a partir da ToolBox:

A seguir disponha os controles conforme mostra a figura abaixo:

Namespaces usados no projeto:

using System;
using System.Drawing;
using System.Windows.Forms;

Variáveis globais declaradas no formulário:

static string nomeArquivo1, nomeArquivo2;
Bitmap img1, img2;
int contador1 = 0, contador2 = 0;
bool flag = true;

1- Evento Load do formulário

        private void Form1_Load(object sender, EventArgs e)
        {
            pgBar1.Visible = false;
            picImagem1.Visible = true;
            picImagem2.Visible = true;
        }

2- Evento Click do link da primeira imagem

       private void lnklbImagem1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ofd1.FileName = "";
            ofd1.Title = "Imagens"; 
            ofd1.Filter = "Todas Imagens|*.jpg; *.bmp; *.png";
            pgBar1.Value = 0;
            pgBar1.Visible = false;
            ofd1.ShowDialog(); 
            if (ofd1.FileName.ToString() != "")
            {
                nomeArquivo1 = ofd1.FileName.ToString();
                picImagem1.Image = new Bitmap(nomeArquivo1);
            }
        }

3- Evento Click do link da segunda imagem

         private void lnklbImagem2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ofd2.FileName = "";
            ofd2.Title = "Imagens";
            ofd2.Filter = "Todas Imagens|*.jpg; *.bmp; *.png";

            ofd2.ShowDialog();
            if (ofd2.FileName.ToString() != "")
            {
                nomeArquivo2 = ofd2.FileName.ToString();
                picImagem2.Image = new Bitmap(nomeArquivo2);
            }
        }

4- Evento Click do botão de comando Comparar Imagens

 private void btnCompararImagens_Click(object sender, EventArgs e)
        {
            pgBar1.Visible = true;
            btnLimpar.Enabled = true;

            string img1_ref, img2_ref;
            img1 = new Bitmap(nomeArquivo1);
            img2 = new Bitmap(nomeArquivo2);

            pgBar1.Maximum = img1.Width;
            if (img1.Width == img2.Width && img1.Height == img2.Height)
            {
                for (int i = 0; i < img1.Width; i++)
                {
                    for (int j = 0; j < img1.Height; j++)
                    {
                        img1_ref = img1.GetPixel(i, j).ToString();
                        img2_ref = img2.GetPixel(i, j).ToString();
                        if (img1_ref != img2_ref)
                        {
                            contador2++;
                            flag = false;
                            break;
                        }
                        contador1++;
                    }
                    pgBar1.Value++;
                }

                if (flag == false)
                {
                    MessageBox.Show("As imagens não são as mesmas, " + contador2 + " pixels diferentes foram encontrados");
                }
                else
                {
                    MessageBox.Show("As imagens são as mesmas, " + contador1 + " pixels iguais foram encontrados, e  " + contador2 + " pixels incorretos foram encontrados");
                }
            }
            else
            {
                MessageBox.Show("As imagens não podem ser comparadas");
            }
        }

 

5- Evento Click dos botões Encerrar e Limpar:

       private void btnEncerrar_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        private void btnLimpar_Click(object sender, EventArgs e)
        {
            picImagem1.Image = null;
            picImagem2.Image = null;
            pgBar1.Value = 0;
        }

Executando o projeto teremos o seguinte resultado:

Eu não entrei em detalhes de otimização do código e talvez exista uma forma mais rápida de fazer a comparação entre duas imagens. Fique à vontade para pesquisar e melhorar o código.

Pegue o projeto completo aqui : ComparaImagens.zip

"Jesus disse-lhes: A minha comida é fazer a vontade daquele que me enviou, e realizar a sua obra."
João 4:34

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti