OpenCV / OpenGL

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
ErnstVolker
Beiträge: 363
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

OpenCV / OpenGL

Beitrag von ErnstVolker »

Hallo Forum,

über den Beitrag zu Texturen laden bei OpenGL bin ich neugierig geworden und es kam mir eine Idee.

Kann man mit OpenGL auch verschiedene Einzelbilder zusammensetzten und erhält ein räumliches Objekt, oder nimmt man dafür OpenCV oder eine Mischung aus beiden?

Konkret:
Ich würde gerne Autos fotografieren (jeweils über die Diagonalen um jeweils eine Längs- und Querseite zu erhalten). Wenn man vier Bilder aufgenommen hat, kann man diese dann zusammenbauen
so dass sich ein räumliches Fahrzeug ergibt welches man drehen und bewegen kann?
Ziel wäre zwei Fahrzeuge gegeneinander zu Positionieren um Schadenkompatibilität zu überprüfen.
Irgendwo habe ich mal was über pixelgenaue Kollisionserkennung aufgeschnappt. Die Kontaktstelle könnte sich dann evtl. umfärben.

Geht so was? Hat sich von Euch schon mal jemand damit beschäftigt?

Gruß

Volker

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: OpenCV / OpenGL

Beitrag von pluto »

Kann man mit OpenGL auch verschiedene Einzelbilder zusammensetzten und erhält ein räumliches Objekt, oder nimmt man dafür OpenCV oder eine Mischung aus beiden?
Ich würde mal behaupten klar geht das. unter http://www.delphigl.com" onclick="window.open(this.href);return false; findest du einige Tutorils zu Thema Texturen.
Ich stelle es mir immer so vor: Ein Würfel hat ja verschiedene Seiten nun kann man jeder Seite eines Würfels eine eigene Textur geben. Du müsstest es auch hinbekommen, dass jede Textur aus unterschiedlichen Texturen besteht.
MFG
Michael Springwald

ErnstVolker
Beiträge: 363
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: OpenCV / OpenGL

Beitrag von ErnstVolker »

Hallo pluto,

vermutlich wird es so gehen. Ich bin bekanntlich Anfänger und muss eigentlich erst mal klein anfangen. Das erste Delphi-Tutorial hat unter Delphi (mit dglOpenGL.pas) schon mal geklappt, unter Lazarus (Windows) noch nicht.
Auch hat unter Linux die Installation von OpenGL aus dem Package noch nicht funktioniert, klappte unter Windows prima. IDE-Kompilieren hat gestreikt. Fehlermeldung habe ich momentan nicht im Kopf. Wie funktioniert denn das TOpenGL-Control unter Lazarus? Genauso wie dglOpenGL? Im Lazarus Buch steht nix über OpenGL.

Durch googeln bin ich auf ein pdf gestoßen wie man einem Würfel ein Bild verpassen kann. Auch im OpenGL-Beispiel von Lazarus wird ein Bild zu einem Würfel zusammengesetzt.
Aber das trifft den Nagel noch nicht auf den Kopf. Ein Würfel hat immer noch gerade Kanten bzw. Flächen die rechtwinklig aufeinander stehen. Mein "Gedanke" war es das Auto aus Einzelbildern zusammenzubauen sodass ein räumliches Auto entsteht mit all seinen nicht geraden Konturen. Stoßfänger zum Besipiel, die ziehen sich ja Richtung Erdboden nach innen, oder auch Türen. Griffe, Zier- und Stoßleisten stehen ggf. hervor usw.

Hier einen Körper zu gewinnen der das alles Berücksichtigt scheint mir unmöglich. Zumal Bilder ja "nur" aus RGB bestehen. Ganz zu schweigen davon auch noch zwei von der Sorte gegeneinander zustellen und die Kontaktpunkte einzufärben...

Aber DANKE für Deine Antwort.

Gruß

Volker

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: OpenCV / OpenGL

Beitrag von MAC »

du kannst unter lazarus auch die dglopengl nutzen. mach ich selber erfolgreich. ich benutze an sich keine TOpenGL klasse, sonder hab nur die unit und eine form für die ausgabe. ich hab auch mal irgendwo hier im forum verstreut was dazu geschrieben.
Such mal nach der glbitmap.pas.
die vereinfacht das laden von texturen.

Code: Alles auswählen

LoadTexture('C:\hallo.png',meinevariable);
glBindTexture(GL_TEXTURE_2D,meinevariable);
allerdings hast du dann erst nen kasten, für kollisionen total unspektakulär. Es gibt spezielle, professionelle (und sicherlich teure) programme die aus 2 bildern 3d daten extrahieren (im moment ja voll der trend) . Eigentlich ist das recht einfach. Du machst 2 Fotos mit einem Abstand von wenigen zentimetern, bewegt sich ein objekt stark , ist es weiter hinten, wenn es sich nur schwach bewegt ist es vorne. Das progblem ist, wie erkennst du das ein haufen roter pixel ein ball dar stellen soll ? Da für den Pc ja kein ball , nen auto und nen fahrrad im bild liegt sondern nur die pixel. Dazu hat die kamera noch ein Rauschen, da sollte man die bilder vorbereiten. Heißt mit gimp / paint.net rauschen reduzieren, eine gewisse abweichung akzeptieren.
Wenn man das erledigt hat brauch man noch die kolision, empfehlenswert währe da evt die newton game engine (stichwort sascha willems ). ich habs mir mal angeguckt, aber noch nicht zum laufen gebracht.

Code: Alles auswählen

Signatur := nil;

Antworten