Hoe kan ik het camerabeeld integreren in de physics engine?

Ik heb onlangs deze video ontdekt en zou iets vergelijkbaars willen implementeren. De basisbenadering is duidelijk: ik moet de afbeelding drempeliseren en controleren of een virtueel object botst met de resterende voorgrond.

In plaats van de fysica zelf te implementeren, zou ik een engine zoals Box2D willen gebruiken. Maar hoe integreer ik de drempelafbeelding in de physics-engine, zodat het mogelijk is om te communiceren met virtuele objecten?

3

1 antwoord

U wilt randdetectie doen. Hiervoor zijn open source-algoritmen. Hoewel je een drempel kunt instellen zoals je suggereert, werken algoritmen voor goede randdetectie zonder dit en kunnen ze leuker zijn omdat je de effen witte achtergrond niet nodig hebt om interessante resultaten te krijgen. Bekijk OpenCV http://www.mathworks.com/products/imaq/demos.html?file=/products/demos/shipping/imaq/demoimaqsl_edgedetection.html voor starters.

Randdetectoren produceren uiteindelijk vectoren in pixelcoördinaten als uitvoer. U wilt deze in Box2D b2_staticBody objecten veranderen die onder programmabesturing bewegen volgens dezelfde tijdreeks als de videoframes die de randen genereerden. U kunt nu kinetische objecten toevoegen aan de Box2D-omgeving en zij zullen zich gedragen alsof de randen onroerende vaste lichamen zijn.

U moet de Box2D-uitvoer op de videoframes leggen. OpenCV zou daar ook mee moeten helpen. Of u kunt een hulpprogramma voor videobewerking gebruiken.

Het zou aanzienlijk meer werk zijn, maar je zou dit zelfs in realtime kunnen laten werken. Merk op dat als u toegang hebt tot MATLAB, het een randdetector voor een videoframesnelheid in een van de gereedschapskisten heeft.

4
toegevoegd