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)
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
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)
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
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 > prog (np 128) to biale, jesli mniejsze to zamazane. A--Pawel
Delphi6
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
a jak sprawdzać rysunek z image pixel po pixelu i porównać czy jest FFFFFFF czy 0000000?--Spin
(Delphi 5 Enterprise)
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
Aha, dla duzych obrazkow sumy moga sie nie miescic w integer, daj wtedy int64--Pawel
Delphi6
dzięki, pq wiedziałem że sie nie zawiodę na tobie {browar} --Spin
(Delphi 5 Enterprise)