title: Display a image from the Webcam using openCV and openGL
body: <p>I'm capturing a picture from a webcam with openCV. Then the frame should be transformed into an openGL texture and be shown on the screen. I got the following code but the window remains black. I'm very new to openGL and have no more ideas why it doesn't work.</p>
  
  <pre><code>int main ()
  {
      int w = 800,h=600;
  
      glfwInit();
  
      //configure glfw 
      glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
      glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
      glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
      glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
      glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
  
  
      GLFWwindow* window = glfwCreateWindow(w, h, "OpenGL", NULL, nullptr); // windowed
      glfwMakeContextCurrent(window);
  
      glewExperimental = GL_TRUE;
      glewInit();
  
      initializeCapturing();
  
      //init GL
      glViewport(0, 0, w, h); // use a screen size of WIDTH x HEIGHT
      glEnable(GL_TEXTURE_2D);     // Enable 2D texturing
  
      glMatrixMode(GL_PROJECTION);     // Make a simple 2D projection on the entire window
      glLoadIdentity();
      glOrtho(0.0, w, h, 0.0, 0.0, 100.0);
  
      glMatrixMode(GL_MODELVIEW);    // Set the matrix mode to object modeling
  
      glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
      glClearDepth(0.0f);
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the window
  
      cv::Mat frame;
      captureFromWebcam(frame,capture0);
  
  
      /* OpenGL texture binding of the image loaded by DevIL  */
      GLuint texid;
      glGenTextures(1, &amp;texid); /* Texture name generation */
      glBindTexture(GL_TEXTURE_2D, texid); /* Binding of texture name */
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); /* We will use linear interpolation for magnification filter */
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); /* We will use linear interpolation for minifying filter */
      glTexImage2D(GL_TEXTURE_2D, 0,3, frame.size().width, frame.size().height, 0, GL_RGB, GL_UNSIGNED_BYTE, 0); /* Texture specification */
  
  
      while(!glfwWindowShouldClose(window))
      {
          glfwPollEvents();
  
          if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
              glfwSetWindowShouldClose(window, GL_TRUE);
  
          // Clear color and depth buffers
         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
         glBindTexture(GL_TEXTURE_2D,texid);
         glMatrixMode(GL_MODELVIEW);     // Operate on model-view matrix
  
          /* Draw a quad */
         glBegin(GL_QUADS);
             glTexCoord2i(0, 0); glVertex2i(0,   0);
             glTexCoord2i(0, 1); glVertex2i(0,   h);
             glTexCoord2i(1, 1); glVertex2i(w, h);
             glTexCoord2i(1, 0); glVertex2i(w, 0);
         glEnd();
         glFlush();
         glfwSwapBuffers(window);
      }
  
  
      releaseCapturing();
      glfwTerminate();
  
      return 1;
  }
  </code></pre>
  
  <p>and the other procedures</p>
  
  <pre><code>cv::VideoCapture capture0;
  cv::VideoCapture capture1;
  
  void captureFromWebcam(cv::Mat &amp;frame, cv::VideoCapture &amp;capture)
  {
      capture.read(frame);
  }
  
  bool initializeCapturing()
  {
      capture0.open(0);
      capture1.open(1);
  
      if(!capture0.isOpened() | !capture1.isOpened())
      {
          std::cout &lt;&lt; "Ein oder mehrere VideoCaptures konnten nicht geöffnet werden" &lt;&lt; std::endl;
  
          if(!capture0.isOpened())
              capture0.release(); 
          if(!capture1.isOpened())
              capture1.release();
          return false;
      }
  
      return true;
  }
  
  void releaseCapturing()
  {
      capture0.release();
      capture1.release();
  }
  </code></pre>