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

Razlika između slika

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

[ Pregleda: 2549 | Odgovora: 11 ] > FB > Twit

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 - pre 227 meseci
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??
 
Odgovor na temu

obucina

Član broj: 38191
Poruke: 723

Jabber: obucina


+7 Profil

icon Re: Razlika između slika12.08.2005. u 20:15 - pre 227 meseci
Radis neku video kompresiju?
Ne moze, moras testirati piksel po piksel.
Cak je ovo i najbrzi nacin.
 
Odgovor na temu

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 - pre 227 meseci
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.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Razlika između slika13.08.2005. u 16:12 - pre 227 meseci
Pa ako ne sadrzi "nikakvu boju" onda je taj pixel crn, zar ne :>>
 
Odgovor na temu

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 - pre 227 meseci
To si u pravu.
Znači trebam sve pixele koji mi netrebaju naštimat na crno.
 
Odgovor na temu

obucina

Član broj: 38191
Poruke: 723

Jabber: obucina


+7 Profil

icon Re: Razlika između slika14.08.2005. u 05:32 - pre 227 meseci
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.
 
Odgovor na temu

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 - pre 227 meseci
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?
 
Odgovor na temu

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 - pre 227 meseci
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.
 
Odgovor na temu

obucina

Član broj: 38191
Poruke: 723

Jabber: obucina


+7 Profil

icon Re: Razlika između slika15.08.2005. u 11:34 - pre 227 meseci
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...
 
Odgovor na temu

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 - pre 227 meseci
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.
 
Odgovor na temu

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 - pre 227 meseci
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??
 
Odgovor na temu

obucina

Član broj: 38191
Poruke: 723

Jabber: obucina


+7 Profil

icon Re: Razlika između slika15.08.2005. u 23:59 - pre 227 meseci
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.
 
Odgovor na temu

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

[ Pregleda: 2549 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

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