Ошибка сегментации из-за доступа к веб-камере на ОС Ma c - PullRequest
0 голосов
/ 09 января 2020

Я кодирую в OpenCV и OpenGL. Цель этого кода - прикрепить камеру Mat, закодированную в OpenCv, в качестве текстуры OpenGl в окне OpenGl.

Итак, моя проблема в том, что когда я пытаюсь запустить свой код, у меня возникает ошибка сегментации, поскольку My Ma c не разрешает доступ через терминал к веб-камере. Я уже разрешаю доступ к терминалу через меню Apple> Системные настройки, нажмите «Безопасность и конфиденциальность», затем нажмите «Конфиденциальность». Это все еще не работает. У меня есть следующий код для display_callback:

static void display_callback()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glUseProgram(program_id);
    glBindVertexArray(VAO);
    glBindVertexArray(0);
    cv::Mat frame;
    // Capture frame-by-frame
    cap >> frame;
    std::cout << "après cap" << std::endl;
    texture(frame);
    draw_frame();
    glutSwapBuffers ();
    glutPostRedisplay();

}

У меня есть следующий код для основного:

cv::VideoCapture cap(0);
int window_width  = 640;
int window_height = 480;

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

    //glewInit();
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);

    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE | GLUT_DEBUG);
    glutInitContextProfile(GLUT_CORE_PROFILE);
    glewInit();
    glutInitWindowSize(window_width,window_height);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Video OpenGL + OpenCV");
    glutDisplayFunc(display_callback);

    if (!cap.isOpened())
        {
            std::cout << "Camera not opened!" << std::endl;
            return -1;
        }
    else
        {
            std::cout << "camera open" << std::endl;
            cv::Mat frame;
            // Capture frame-by-frame
            cap >> frame;
            cv::imshow("camera",frame);
        }   
    return 0;
}

И результат на терминале Segmentation fault: 11.

И я попытался отладить код через терминал, используя 'lldb ./main'. На терминале я получил следующий результат: terminal result

Так как я могу разрешить правильно ли мой доступ к веб-камере?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...