Как интегрировать OpenCV с OpenGL (Visual C ++ 2008) - PullRequest
0 голосов
/ 10 ноября 2011

Я написал два кода, используя OpenCv (для обнаружения маркеров) и OpenGL (для создания простого 3D-бокса). Но я понятия не имею, как интегрировать эти два. Пример: отображение окна в окне OpenCV.

Когда я попытался вызвать следующие две функции OpenCV и OpenGL, кажется, что выполняются только функции OpenGL. (Окно OpenGL только создано, но теперь OpenCV)

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;
}

Спасибо

Ответы [ 3 ]

2 голосов
/ 10 ноября 2011

glutMainLoop входит в цикл обработки событий GLUT.Эта процедура должна вызываться не более одного раза в программе GLUT. После вызова эта процедура никогда не вернется .

Ваш код заблокируется на glutMainLoop, поэтому вам нужно позвонить startOCV перед этим.

А если startOCV также блокирует, вам нужно запустить эту функцию в потоке , чтобы main() мог продолжить и выполнить glutMainLoop.

EDIT ::

Но правильный способ сделать наоборот : скопировать изображение OpenCV в текстуру OpenGL и отобразить его в окне OpenGL .

1 голос
/ 10 ноября 2011

Вы можете попробовать последнюю версию ствола OpenCV.Они интегрируют OpenGL в highgui (модуль дисплея OCV).Это может облегчить вашу жизнь и решить эту проблему для вас.

Не забывайте, что любая версия ствола может содержать ошибки и быть немного незарегистрированной.Следующий официальный релиз еще не запланирован.

0 голосов
/ 06 января 2017

У меня была похожая проблема, и вот как я ее решил. У меня был код для захвата потока камеры, который использовал OpenCV и работал в бесконечном цикле while, и анимация, которая использовала openGL и glut- glutMainLoop().

Я поместил код openCV для захвата потока камеры внутри функции обновления - и назвал glutTimerFunc(TIMER_MS, update, 0) в main. Теперь работает анимация и камера. Однако анимация немного замедлилась.

...