NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Vyhľadavanie podobrázku v obrázku

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
František Pastorek:22.1.2016 16:42

Snažím sa zostaviť program, ktorý zistí či sa v ľubovoľnom obrázku nachádza mnou vopred zvolený obrázok. Problém je však v tom, že keď si zoberiem nejaký obrázok, z neho vystrihnem časť tak tá časť má v konečnom dôsledku inú bitovú mapu ako tá časť v pôvodnom obrázku a nerozumiem prečo. V kóde porovnávam iba jednu zložku farby v pixeli. Nefunguje to ani s tým takže zatiaľ nemám dôvod porovnávať všetky tri zložky. Vopred ďakujem za akúkoľvek radu.

Bitmap b1 = new Bitmap("C:/Users/stolnyPC/Desktop/img1.png");
Bitmap b2 = new Bitmap("C:/Users/stolnyPC/Desktop/img2.png");

BitmapData b1Data = b1.LockBits(new Rectangle(0, 0, b1.Width, b1.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
BitmapData b2Data = b2.LockBits(new Rectangle(0, 0, b2.Width, b2.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);

byte[] cur1 = new byte[b1Data.Width * b1Data.Height];
byte[] cur2 = new byte[b2Data.Width * b2Data.Height];

Marshal.Copy(b1Data.Scan0, cur1, 0, b1Data.Width * b1Data.Height);
Marshal.Copy(b2Data.Scan0, cur2, 0, b2Data.Width * b2Data.Height);

for (int i = 0; i < b1Data.Width * b1Data.Height; i++)
{
    if (cur1[i] == cur2[0] && cur1[i+1] == cur2[1])
    {
        for (int j = 0, k = i; j < b2Data.Width * b2Data.Height; j++, k++)
        {
            if (cur1[k] == cur2[j])
            {
                if (j == b2Data.Width * b2Data.Height - 1)
                {
                    label2.Text = "successful";
                    i = b1Data.Width * b1Data.Height;
                    break;
                }
                else if (j == b2Data.Width)
                    k += b1Data.Width - b2Data.Width - 1;
            }
            else
                break;
        }
    }
}

b1.UnlockBits(b1Data);
b2.UnlockBits(b2Data);
 
Odpovědět
22.1.2016 16:42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.