ZBLOG

写一个opengl读取图片并渲染显示的例子

以下是一个使用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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9055

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?