Я кодирую в 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'. На терминале я получил следующий результат:
Так как я могу разрешить правильно ли мой доступ к веб-камере?