OpenGLで描画された画面をOpenCVのcv::Mat形式の画像として取得する
たぶんこんな感じ。描画フォーマットを自動判別するのはやってない。
cv::Mat getScreen() { int width = glutGet(GLUT_WINDOW_WIDTH); int height = glutGet(GLUT_WINDOW_HEIGHT); int bits = glutGet(GLUT_WINDOW_BUFFER_SIZE); int type = CV_8UC4; // またはCV_8UC3 int format = GL_BGRA_EXT; // またはGL_RGB, GL_RGBA, GL_BGR_EXT glReadBuffer(GL_FRONT); cv::Mat out_img(cv::Size(width, height), type); glReadPixels(0, 0, width, height, format, GL_UNSIGNED_BYTE, out_img.data); cv::flip(out_img, out_img, 0); return out_img; }