2011-11-10 3 views
-1

OpenCv (마커 감지 용)와 OpenGL (간단한 3D 상자 만들기 용)을 사용하여 두 개의 코드를 작성했습니다. 그러나 나는이 두 가지를 통합하는 방법에 대한 단서가 없다. 예 : OpenCV 창에 상자 표시.OpenCV와 OpenGL을 통합하는 방법 (Visual C++ 2008)

OpenCV 및 OpenGL의 다음 두 가지 기능을 호출하려고하면 OpenGL 기능 만 실행되는 것 같습니다.

int main(int argc, char** argv){ 

    initGL(argc, argv); // basic initialization steps for OpenGL 
    glutMainLoop(); // shows 3D scene in a new window 
    startOCV(); // shows camera stream in a new window 
    return 0; 
} 

감사

답변

2

glutMainLoop GLUT의 이벤트 처리 루프에 진입을 (OpenGL은 창은 현재 OpenCV의 하나 만들지 만한다). 이 루틴은 GLUT 프로그램에서 한 번만 호출되어야합니다. 호출되면이 루틴은 절대로을 반환하지 않습니다.

코드는 glutMainLoop에서 차단되므로 앞에 startOCV으로 전화해야합니다.

startOCV 블록이 또한있는 경우 이되어야 main()이 계속 실행되어 glutMainLoop을 실행할 수 있습니다. OpenGL은 텍스처에 사본을 OpenCV의 이미지와 의 OpenGL 창 해당 렌더링 :

편집 ::

그러나 옳은 방법은 the other way around입니다.

+0

+1. 여전히 동일합니다. OpenCV 창만 있습니다. OpenGL은 없습니다. : – coder9

+0

스레드와 관련이 있습니까? – coder9

+1

즉, 블록에 'startOCV'라는 코드가 있습니다. 차단하고있는 루프가있을 수 있으며, 아마도 카메라를 다루는 경우 일 수 있습니다. ** 해결책은 다음과 같습니다. 스레드를 사용하려면 ** startOCV를 시작하여'main()'의 실행을 막지 않도록'glutMainLoop'을 실행하십시오 – karlphillip

1

최신 OpenCV 트렁크를 사용해 볼 수 있습니다. highgui (OCV 디스플레이 모듈)에 OpenGL을 통합합니다. 그것은 당신의 삶을 더 편하게 만들고, 문제를 해결할 것입니다.

트렁크 버전이 버그가 있거나 문서화되지 않았 음을 잊지 마십시오. 다음 공식 릴리스는 아직 계획되지 않았습니다.

0

나는 비슷한 문제가 있었는데, 어떻게 해결 했는가. OpenCV를 사용하고 openGL 및 glut- glutMainLoop()을 사용하는 무한 루프 및 애니메이션에서 실행되는 카메라 스트림을 캡처하는 코드가 있습니다.

main에 glutTimerFunc (TIMER_MS, update, 0)라고 부르는 업데이트 함수 안에 카메라 스트림을 캡처하기위한 openCV 코드를 넣습니다. 애니메이션과 카메라 스트림이 모두 작동합니다. 그러나 애니메이션 속도가 느려졌습니다.

관련 문제