cv::Mat img = cv::imread("img.png"); GLuint tex_in; glGenTextures(1, &tex_in); glBindTexture(GL_TEXTURE_2D, tex_in); /*By practice, the internalParam: * GL_RGB, GL_RGBA, GL_RGB8, GL_RGBA8 work * GL_RGB8UI, GL_RGBA8UI don't work */ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, img.cols, img.rows, 0, GL_BGR, GL_UNSIGNED_BYTE, img.data); // copy data to texture object cv::Mat test(img.rows, img.cols, CV_8UC3); glGetTexImage(GL_TEXTURE_2D, 0, GL_BGR, GL_UNSIGNED_BYTE, (void*)test.data); // read the image out of texture object cv::imshow("test", test);