Imaginary Code

from kougaku-navi.net

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