AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OpenCV und Delphi

Ein Thema von alf.stefan · begonnen am 21. Nov 2005 · letzter Beitrag vom 14. Dez 2009
Antwort Antwort
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#1

OpenCV und Delphi

  Alt 21. Nov 2005, 15:30
Hallo zusammen


hat hier in diesem Forum jemand schon was mit openCV von Intel gemacht und das auch noch in Delphi und VCL?
Ich scheitere bis jetzt daran, dass das Imageformat iplImage nicht so ohne weiteres in TBitmap Format konvertiert werden kann. (jedenfalls nicht von mir).

Es muss immer über ein DIB (Device Independent Format) Format gehen.

Super wäre es wenn jemand einen Tip hätte wie man mit einem geänderten iplImage ein Timage.Picture.Bitmap aktualisieren und neu malen lassen kann.

Ein Tutorial "DIB in Delphi" wäre natürlich auch toll.

Ich hoffe mir kann da jemand helfen.

Gruß

Stefan
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: OpenCV und Delphi

  Alt 21. Nov 2005, 15:32
Ich wollte mal eine vollstaendige Konversion der Header machen, aber ich hatte keine Zeit.
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#3

Re: OpenCV und Delphi

  Alt 21. Nov 2005, 15:42
und irgendwas allgemeines DIB/Delphi relevantes?

in einer älteren IPL (Intel Image Processing Lib)Version gibt es eine Delphi Anpassung bei der auch ein

iplTranslateDIB um von iplImage nach DIB zu übersetzen
iplConvertFromDIB um zu konvertieren und
iplConvertToDIB grade anders rum.

Aber das funktioniert nicht. Weis jemand darüber vielleicht Bescheid wie man das gangbar machen kann?

Gruß von

Stefan
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#4

Re: OpenCV und Delphi

  Alt 22. Nov 2005, 16:49
Ich weiss ja nicht ob es jemand interessiert aber ich habs doch noch hinbekommen.
Jetzt gibt es zwar andere Probleme aber das gehört nicht hierher.

also was ich wollte war eine Procedur die ein pPplImage bekommt und das dann auf einem TImage darstellt.

Dazu war es scheinbar notwendig die Bilddaten im richtigen Format in einen MemoryStream zu kopieren. Der MemoryStream wird dann einfach mit LoadFromStream in das Image geladen und dann Image refresh und fertig.

Wenn jemand so freundlich wäre das mal anzuschauen und einen Komentar abzugeben wäre das sehr willkommen.
Ich bin mir nämlich nicht sicher ob ich das mit den Pointern und alloc und wieder freigeben richtig gemacht habe.


Bis bald

Stefan

Delphi-Quellcode:
procedure showIt(iplImage : pIplImage; image: TImage);
var
   pp : pointer;
   bmih : pBitmapInfoHeader;
   pBmfh : pBitmapFileHeader;
   sz : cardinal;
   ms : TMemoryStream;
   p : pointer;
begin


   ms := TMemoryStream.Create;

   sz := SizeOf(TBitmapFileHeader);
   pp := AllocMem(sz);
   bmih := @(pbyteArray(pp)^[SizeOf(TBitmapInfoHeader)]);


   bmih.biSize := SizeOf(TBitmapInfoHeader);
   bmih.biWidth := iplImage.Width;
   bmih.biHeight := iplImage.Height;
   bmih.biPlanes := 1;
   bmih.biBitCount := iplImage.Depth*iplImage.NChannels;
   bmih.biCompression := BI_RGB;
   bmih.biSizeImage := iplImage.ImageSize;// ((iplImage.Width+31)div 32*4)*8*iplImage.Height;
   bmih.biXPelsPerMeter :=0;
   bmih.biYPelsPerMeter :=0;
   bmih.biClrUsed :=0;
   bmih.biClrImportant :=0;



//
   StreamDIB(bmih,ms);

   pBmfh := ms.Memory;
// p := pointer(Cardinal(ms.Memory) + pBitmapFileHeader(ms.Memory)^.bfOffBits);
   p := pointer(Cardinal(pBmfh) + pBmfh^.bfOffBits);

   Move(iplImage^.ImageData^, p^, bmih^.biSizeImage);


   ms.Position :=0;
   image.Picture.Bitmap.LoadFromStream(ms);

   image.Refresh;

   IplDeallocateImage(iplImage);

   ms.Free;
   freeMem(pp,sz);
end;
Delphi-Quellcode:
procedure streamDib(header: pBITMAPINFOHEADER;var ms:TMemoryStream);
var
    memsize: Integer;
    dib :pBitmapInfoHeader;
    pBfh: pBitmapFileHeader;
    i:Integer;
    b : byte;
begin
    memsize := SizeOF(TBitmapFileHeader) + header.biSize +
        (( ((header.biWidth * header.biBitCount) + 31) div 32 ) *4) *
        header.biHeight;
    if (Header^.biClrUsed>0) then Inc(MemSize,256 * sizeof(TRGBQUAD) );
    ms.SetSize(memSize);
    pBfh := ms.Memory;

    pBfh.bfType := $4D42;
    pBfh.bfSize := memsize;
    pBfh.bfOffBits := memsize
    - (( ((header.biWidth * header.biBitCount) + 31) div 32 ) *4) *
        header.biHeight;
    dib := @(pByteArray(pBfh)^[SizeOF(TBitmapFileHeader)]);
    dib^ := header^;
    if (dib^.biClrUsed>0) then begin
        for i := 0 to dib^.biClrUsed-1 do begin
            b := Round((i*255)/(dib^.biClrUsed-1));
            pBitmapInfo(dib).bmiColors[i].rgbRed := b;
            pBitmapInfo(dib).bmiColors[i].rgbGreen := b;
            pBitmapInfo(dib).bmiColors[i].rgbBlue := b;
        end;
    end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Lumpiluk
Lumpiluk

Registriert seit: 25. Dez 2008
110 Beiträge
 
#5

Re: OpenCV und Delphi

  Alt 13. Dez 2009, 00:30
Die Beiträge sind ja inzwischen uralt.
Gibt es da jetzt vielleicht schon eine einfache Möglichkeit, das in Delphi zu nutzen?

Ich bin vor kurzem auf YouTube-Videos mit diesem Face Tracking gestoßen und zusammen mit OpenGL wäre das bestimmt ziemlich interessant...
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#6

Re: OpenCV und Delphi

  Alt 14. Dez 2009, 08:22
Hallo

uralt ist aber ein bisschen übertrieben.

bei openCV regt sich wieder was! da kam jetzt gerade die Version 2.0 raus.
Was die Umsetzung in Delphi angeht gibt es eine Ur-Version
von einem vladimir nextow
die dann von von G. de Santis erweitert wurde um das camShift demo zu verwirklichen
diese habe ich zur Grundlage genommen und auch noch ein paar Funktionen reingepackt.

Einfacher ist das aber mittlerweile nicht geworden!

zu der openCV unit brauch man noch die IPL (Image Processing Library)
oder wahrscheinlich funktioniert auch (vielleicht sogar besser) die IPP (Intel Integrated
Performance Primitives) Bibliothek

Du siehst alles Stückwerk!

Wenn Du trotzdem damit anfangen willst, melde Dich und ich schicke Dir was ich habe.

Gruß

Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz