Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Razlika između slika

[es] :: Pascal / Delphi / Kylix :: Razlika između slika

[ Pregleda: 776 | Odgovora: 11 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp299.bih.net.ba.



Profil

icon Razlika između slika12.08.2005. u 14:45

Imam dva bitmap-a. Trebam naći razliku, tj. trebam u novi bitmap upisati ono što se promijenilo u drugom u odnosu na prvi.
Pravi screen capture više puta. Sada želim da samo prvi capture bude pun, dok u ostalim upicujem samo promjene.
Da li ovo može riješiti bez testiranja pixel po pixel??
12.08.2005. u 14:45 

obucina
Beograd

Član broj: 38191
Poruke: 633
213.244.197.*



Profil

icon Re: Razlika između slika12.08.2005. u 20:15
Radis neku video kompresiju?
Ne moze, moras testirati piksel po piksel.
Cak je ovo i najbrzi nacin.
12.08.2005. u 20:15 

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp405.bih.net.ba.



Profil

icon Re: Razlika između slika13.08.2005. u 14:44
Radim kompresiju.
Pravim screen capture npr. svakih 50 ms, tako da bi sačuvao prostora moram ovo raditi.
Možel malo pomoći oko PixelPoPixel metode.
Kako napravit da u nekoj slici ne ćelim da neki pixel sadrži informacije o boji?
Konto sam da taj pixel narpavim bijem i onda sliku postavim na transparent?
Ali me zanima da li neki pixel može da ne sadrži nikakvu boju.
13.08.2005. u 14:44 

reiser
Vranje

Član broj: 7895
Poruke: 1892
*.dialup.neobee.net.



Profil

icon Re: Razlika između slika13.08.2005. u 16:12
Pa ako ne sadrzi "nikakvu boju" onda je taj pixel crn, zar ne :>>
13.08.2005. u 16:12 

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp509.bih.net.ba.



Profil

icon Re: Razlika između slika13.08.2005. u 16:15
To si u pravu.
Znači trebam sve pixele koji mi netrebaju naštimat na crno.
13.08.2005. u 16:15 

obucina
Beograd

Član broj: 38191
Poruke: 633
*.vdial.verat.net.



Profil

icon Re: Razlika između slika14.08.2005. u 05:32
Uzmes boju piksela sa jedne slike i uzmes boju piksela sa druge slike i oduzmes ih.

Novu sliku dobijas tako sto ovu razliku dodas na prvu sliku.

U pseudo kodu

for x
for y
razlika(x, y) = slika2(x, y) - slika1(x, y)


for x
for y
slika2(x, y) = slika1(x, y) + razlika(x, y)

razlika nije druga slika, vec niz vrednosti koje predstavljaju razliku izmedju dve slike, a koja moze biti i negativna (npr beli piksel postane crn), za razliku od vrednosti boje piksela koja je uvek pozitivna. razlika ce obicno sadrzati male brojeve i nule a to moze dobro da se kompresuje.
14.08.2005. u 05:32 

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp443.bih.net.ba.



Profil

icon Re: Razlika između slika14.08.2005. u 20:15
Evo kako sam ja to uradio
Code:

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j,w,h:integer;
  bmp1,bmp2,bmp3:TBitmap;
  JPGImage:TJpegImage;
begin
// bmp1 i bmp2 imam na hard disku i njih otvaram
// bmp3 mi predtavlja razliku bmp1 i bmp2, tj. sve one pixele koji se nalaze u bmp2 a kojih nema u bmp1
bmp1:=TBitmap.Create;
bmp2:=TBitmap.Create;
bmp3:=TBitmap.Create;
bmp1.LoadFromFile('c:\pic1.bmp');
bmp2.LoadFromFile('c:\pic2.bmp');
w:=bmp1.Width;
h:=bmp1.Height;
bmp3.Width:=w;
bmp3.Height:=h;
for i:=1 to w do
    for j:=1 to h do
      begin
        //bmp3.Canvas.Pixels[i,j]:=0;
        if bmp1.Canvas.Pixels[i,j]<>bmp2.Canvas.Pixels[i,j] then
          bmp3.Canvas.Pixels[i,j]:=bmp2.Canvas.Pixels[i,j]; // ovdje računa razliku
      end;
// konvertujem bmp3 u jpg da bi bio mnogo, mnogo manji
JPGImage:=TJpegImage.Create;
JPGImage.Assign(bmp3);
JPGImage.CompressionQuality:=75;
JPGImage.Smoothing:=True;
JPGImage.SaveToFile('c:\pic3.jpg');
bmp3.SaveToFile('c:\pic3.bmp');
// prikazujem sva tri bitmapa na formi
Image1.Picture.Bitmap:=bmp1;
Image2.Picture.Bitmap:=bmp2;
Image3.Picture.Bitmap:=bmp3;
end;


Pogledaj gore onu liniju
Code:
bmp3.Canvas.Pixels[i,j]:=0;

Kada nju uključim slika bude veća. Znači ako je slika bijela onda je veća.

Eh sada recimo da imam samo bmp1 i bmp3 (nemam bmp2).
Trebam da dobijem bmp2
To mi ne ide. Igleda da bmp3 ondje gdje ne treba ništa prikazati prikazuje bijelu.

Možda da pravim matricu razlika po pixelima. Kako proširivati dimenzije matrice dinamički, i kako zapravo snimiti tu matricu u fajl?
14.08.2005. u 20:15 

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp66.bih.net.ba.



Profil

icon Re: Razlika između slika14.08.2005. u 23:43
Bio si u pravu, bolja je kompresija kada praviš razliku vrijednosti pixela.
Code:

for i:=0 to w-1 do
  for j:=0 to h-1 do
    bmp3.Canvas.Pixels[i,j]:=bmp1.Canvas.Pixels[i,j] - bmp2.Canvas.Pixels[i,j];

Code:

for i:=0 to w-1 do
  for j:=0 to h-1 do
     bmp2.Canvas.Pixels[i,j]:=bmp1.Canvas.Pixels[i,j] - bmp3.Canvas.Pixels[i,j];

Međutim i ovdje imam nekih problema, neki pixeli ne budu iste boje nakon povratka slike.
14.08.2005. u 23:43 

obucina
Beograd

Član broj: 38191
Poruke: 633
*.vdial.verat.net.



Profil

icon Re: Razlika između slika15.08.2005. u 11:34
Rekoh ti da razlika nije nova slika, kao sto ti ovde radis, vec samo matrica. Razlika moze da bude negativna, a piksel je UVEK pozitivan. Tu ti je greska, zbog koje ne dobijas iste boje piksela.

Citaj u helpu o dinamickim nizovima za menjanje velicine matrice, o radu sa fajlovima za snimanje matrice u fajl, a kompresiju nemoj raditi jpeg-om, posto ne kompresujes sliku vec matricu razlika izmedju dve slike. Koristi bilo koji algoritam za kompresiju, imas zlib uz Delphi, a imas i free komponente za kompresiju (zip, lzh). Guglaj...
15.08.2005. u 11:34 

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp463.bih.net.ba.



Profil

icon Re: Razlika između slika15.08.2005. u 13:04
OK, i ja sam mislio da pixel ne može biti negativan ali sam onda vidio da je TColor deklarisan na slijedeći način
Code:
TColor = -$7FFFFFFF-1..$7FFFFFFF;

Poslušat ću tebe.
15.08.2005. u 13:04 

borovac
127.0.0.1

Član broj: 29278
Poruke: 220
*.dlp166.bih.net.ba.



Profil

icon Re: Razlika između slika15.08.2005. u 14:23
Evo napravio sam matricu
Code:

var
  MBitmap:array of array of integer;

w:=bmp1.Width;
h:=bmp1.Height;
SetLength(MBitmap,w,h);
for i:=0 to w-1 do
  for j:=0 to h-1 do
    MBitmap[i,j]:=bmp1.Canvas.Pixels[i,j]-bmp2.Canvas.Pixels[i,j];

Kako sada to snimiti u fajl?
Hoćul u textualni, ili nešto drugo??
15.08.2005. u 14:23 

obucina
Beograd

Član broj: 38191
Poruke: 633
*.vdial.verat.net.



Profil

icon Re: Razlika između slika15.08.2005. u 23:59
Topic u Helpu je File Types

Vazne stvari su
Fajl: file of integer;
AssignFile, Reset, Write

Prvo upisujes visinu i sirinu slike, a zatim piksele.
15.08.2005. u 23:59 

[es] :: Pascal / Delphi / Kylix :: Razlika između slika

[ Pregleda: 776 | Odgovora: 11 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.