porównanie obrazu

0

jak porównać obraz, albo sprawdzć, czy został zmieniony? Chodzi mi o to, ze jak skanuje jakąs kartkę, to chce sprawdzić, czy zaznaczono odpowiedź np. tak czy nie w kratce o rozmiarach 1:1 cm, w wyznaczonej pozycji. Wiem że zamotałem ale może ktoś zrozumie...--Spin
(Delphi 5 Enterprise)

0

Robisz podwójną pętlę, idziesz pixel po pixelu i sprawdzasz czy pixele są o takich samych kolorach. Jeśli tak tozwiększasz o 1 jakąś zmienną, jeśli nie to nic. Potem dzielisz tą zmienną przez ilość wszystkich pixeli i dajesz *100. No i wychodzi ci podobieństwo obrazków w procentach. Przynajmniej w teorii... :)---------------------------
Delphi 6

Pozdrówka

0

wolałbym kawałek kodu. nie trzeba sprawdzać całego rysunku pixel po pixelu, bo odpowiedzi mają być zaznaczone w konkretnym miejscu, i tylko to miejsce cgcę sprawdzić, czy jest różne, np. od koloru białego....--Spin
(Delphi 5 Enterprise)

0

thenkles napisał:
Robisz podwójną pętlę, idziesz pixel po pixelu i sprawdzasz czy pixele są o takich samych kolorach. Jeśli tak tozwiększasz o 1 jakąś zmienną, jeśli nie to nic.

ja bym tez sprawdzal jak bardzo pixele sie roznia. w koncu FFFFFF of FEFEFE prawie sie nie rozni, a od 000000 bardzo. A Twoja metoda tego nie odroznia--Pawel

Delphi6

0

Spin napisał:
wolałbym kawałek kodu. nie trzeba sprawdzać całego rysunku pixel po pixelu, bo odpowiedzi mają być zaznaczone w konkretnym miejscu, i tylko to miejsce cgcę sprawdzić, czy jest różne, np. od koloru białego....

no to wylicz sredni kolor ze wszystkich pixeli w tym miejscu. Jesli skladowe RGB beda &gt prog (np 128) to biale, jesli mniejsze to zamazane. A--Pawel

Delphi6

0

Przedwczoraj mialem z tego egzamin : ) Moglbym pisac i pisac bo to interesujący wbrew pozorą temat : ) Może wykorzystaj do tego funkcje autokorelacji, choc nie jest to w Fotogrametrii najlepsze rozwiazanie , no ale nie analizujesz zdjęć satelitarnych tylko kartki papieru, a poza tym obszar poszukiwań jak rozumie jest znany : ) Leci to mniej wiecej tak ze dla danego obszaru ukladasz sobie funkcje (roznice od wartosci sredniej jasnosci poszczegolnych pixeli) i porownojesz to z wzorcem. Chociaz w tym przypadku ja bym wziął sobie metodę "progrową" że po prostu ustal dwa przedziały albo próg średniej jasności pixeli dla danego obszaru. Powyżej to 'check' poniżej to unchek. I tyle.

--pozdrowienia

0

a jak sprawdzać rysunek z image pixel po pixelu i porównać czy jest FFFFFFF czy 0000000?--Spin
(Delphi 5 Enterprise)

0

function GetAverageColor(bitmapa: Tbitmap; x1, y1, x2, y2: integer):TColor;
*podaje usredniony kolor z obszaru ograniczonego punktami x1, y1, x2, y2

  • (wlacznie) na bitmapie
    *uwaga: nie sprawdza, czy punkty mieszcza sie w bitmapie!!!
    var
    color: tcolor;
    pixelcount, x, y, sumr, sumg, sumb :integer;
    begin
    sumr:=0;
    sumg:=0;
    sumb:=0;

for x:=x1 to x2 do
for y:=y1 to y2 do
begin
color:=Bitmapa.Canvas.Pixels[x,y];
inc (sumr, color and $ff);* red
inc (sumg, (color and $ff00) shr 8); * green
inc (sumb, (color and $ff0000) shr 16); *blue
end;

pixelcount:=abs((x2-x1+1)*(y2-x1+1));
result:=rgb(round(sumr/pixelcount),round(sumg/pixelcount),
round(sumb/pixelcount));
end;

jak chcesz czytac z image'u a nie z bitmapy, to przerob albo dorob przeciazona wersje. ale nie widze powodu, zeby tego nie zrobic na bitmapie w pamieci.
--Pawel

Delphi6

0

Aha, dla duzych obrazkow sumy moga sie nie miescic w integer, daj wtedy int64--Pawel

Delphi6

0

dzięki, pq wiedziałem że sie nie zawiodę na tobie {browar} --Spin
(Delphi 5 Enterprise)

1 użytkowników online, w tym zalogowanych: 0, gości: 1