以下是一个使用OpenGL读取图片并渲染显示的例子,你可以参考:
#include <GL/glut.h>
#include <opencv2/opencv.hpp>
using namespace cv;
Mat image;
GLuint textureID;
void display() {
glClear(GL_COLOR_BUFFER_BIT);
// 绑定纹理对象
glBindTexture(GL_TEXTURE_2D, textureID);
// 设置纹理过滤方式
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2d(-1.0f, 1.0);
glEnd();
glutSwapBuffers();
}
void init() {
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
// 加载图像并生成纹理
cv::flip(image,image, 0);//OpenCV默认图像原点在左上角,而OpenGL在左下角,因此需要翻转图像
// 将图像数据上传到显存中作为纹理数据
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image.cols, image.rows, GL_BGR_EXT, GL_UNSIGNED_BYTE, image.data);
}
int main(int argc, char** argv) {
// 读取图像
image = imread("image.jpg");
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(image.cols, image.rows);
glutCreateWindow("OpenGL Image Display");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
注意,上述代码使用了OpenCV和OpenGL库,需要提前安装相应的依赖库,并将图片命名为”image.jpg”放在可执行文件的同一目录下。编译时需要链接相应的库文件,例如:
g++ main.cpp -o opengl_example -lopencv_core -lopencv_highgui -lGL -lglut
这是一个简单的例子,展示了如何使用OpenGL读取图片并渲染显示。你可以根据自己的需求进行进一步扩展和优化。
内容由零声教学AI助手提供,问题来源于学员提问




