Hoppa till innehåll

Bild Match


Mattias763

Rekommendera inlägg

Här får du ett program som gör det du vill, gjort av mig nyss: BMPMatch.zip

 

Tyvärr fungerar den endast med Windows Bitmap filer av samma upplösning, men ett vanligt bildredigeringsprogram kan konvertera bilder till en sådan fil med önskad upplösning. Kom ihåg att läsa ReadMe.txt filen då den innehåller mer information om programmet.

 

Bilder:

http://img269.imageshack.us/img269/5821/bmpmatch1.jpg http://img199.imageshack.us/img199/3260/bmpmatch2.jpg http://img197.imageshack.us/img197/3839/bmpmatch3.jpg

Länk till kommentar
Dela på andra sajter

Btw, är det du som kodat programmet eller har du använt dig utan en annan sås?

Kollar du hur många pixlar som det skiljer eller storleken på filen?

Riktig heta cmos färger :P

 

Verkar dock inte vara så svårt att göra det i #c

 

http://www.araxis.com/merge/topic_comparing_image_files.html

http://www.imagemagick.org/script/command-line-tools.php

Redigerat av Desajn
Länk till kommentar
Dela på andra sajter

Jag har kodat hela programmet i C++ med Windows och standardfunktioner. Du vill inte se källkoden, den är 309 rader lång p.g.a. Text User Interface användargränssnittet. Sen har jag använt mig utav SDL för att kunna läsa bitmappar, jag letade överallt efter ett lätt bra sätt i Win32 API:t och på internet men jag hittade inget så jag använde mig utav SDL, vilket är ett ganska fult sätt men jag hittade inget annat.

 

Då han ville veta hur stor skillnaden var på bilden och inte på filen(det finns faktiskt en stor skillnad, t.ex. en 8-bit bitmapsfil skiljer sig ifrån en 24-bit bitmapsfil, men bilderna kan vara likadana) så kollar jag bara värdena på pixlarna på bilden. Eftersom att bilderna blir jämförda pixel för pixel så måste bilderna ha lika stor upplösning för annars så blir resultatet fel.

 

Men jag jämför inte bara typ "if(ärPixelsLika(bitmap1, bitmap2, x, y))", utan jag gör så att jag tar skillnaden i pixlarna. T.ex. har jag två olika pixels(0xRRGGBB), 0xFFFFFF och 0xFFC48D så blir skillnaden 0x003B72 alltså 59 av 255 på grönt och 114 av 255 på blått. Maximal skillnad på alla värden är då 3 * 255 vilket blir 765; för att få procentskillnaden på just den pixeln tar man då 100 * (59 + 114) / 765. Sen fortsätter den så igenom alla pixlar och lägger ihop alla procent och dividerar det med antalet pixlar för att få skillnaden i procent för hela bilden. Detta medför att om jag har två identiska bilder bara att den ena har en liten reducering på ljusstyrkan på alla pixlarna så ger inte programmet en 0% match utan typ >75% match beroende på hur stor reducering av ljusstyrkan.

(OBS! Detta sätt är inte det sättet som programmet arbetar på men det är samma princip, programmets beräkningar är optimerade för att räkna ut resultatet snabbare och precisare än vad ovanstående algoritm skulle göra.)

Redigerat av Vitdom
Länk till kommentar
Dela på andra sajter

Gå med i konversationen

Du kan skriva nu och registrera dig senare. Om du har ett konto, logga in nu för att posta med ditt konto.

Gäst
Svara på det här ämnet...

×   Klistrade in som rich text.   Klistra in som vanlig text istället

  Endast 75 emojis är tillåtet.

×   Din länk har automatiskt inbäddats.   Visa som en länk istället

×   Ditt tidigare innehåll har återställts.   Rensa redigeraren

×   Du kan inte klistra in bilder direkt. Ladda upp eller infoga bilder från URL.

×
  • Skapa ny...