![]() |
OpenCV und Delphi
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 |
Re: OpenCV und Delphi
Ich wollte mal eine vollstaendige Konversion der Header machen, aber ich hatte keine Zeit.
|
Re: OpenCV und Delphi
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 |
Re: OpenCV und Delphi
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; |
Re: OpenCV und Delphi
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... |
Re: OpenCV und Delphi
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz