OpenGL——OpenCV读取图片进行纹理贴图

Posted farewell-farewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL——OpenCV读取图片进行纹理贴图相关的知识,希望对你有一定的参考价值。

使用OpenCV读取图片代码如下

    img = imread(m_fileName);

    if (img.empty())
    {
        fprintf(stderr, "Can not load image %s
", m_fileName);
        return -1;
    }
    //设置长宽
    int width = img.cols;
    int height = img.rows;
    int channel = img.channels();
    printf(" depth  %d
", channel);

    //获取图像指针
    int pixellength = width * height * channel;
    pixels = new GLubyte[pixellength];
    memcpy(pixels, img.data, pixellength * sizeof(char));
    //imshow("OpenCV", img);
    

    glGenTextures(1, &m_textureObj);
    glBindTexture(m_textureTarget, m_textureObj);
    //必须一个RGB  一个BGR(opencv的mat类的颜色通道是BGR) 否则会出现颜色偏差
    glTexImage2D(m_textureTarget, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, pixels);
    //纹理放大缩小使用线性插值
    glTexParameterf(m_textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(m_textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);    
    glBindTexture(m_textureTarget, 0);
    free(pixels);

运行程序时,出现了两个问题:

  • 纹理贴图是黑白的——解决方案:读取的图片的高和宽的大小改为2的倍数即可
  • 贴图颜色出现偏差——解决方案:(原因见上)
    glTexImage2D(m_textureTarget, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, pixels);

 

以上是关于OpenGL——OpenCV读取图片进行纹理贴图的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL入门05.纹理贴图

Opencv 导入图片 Opengl 显示纹理(含用例代码)

Opengl ES 1.x NDK实例开发之六:纹理贴图

(转)使用OpenGL显示图像Android OpenGLES2.0——纹理贴图之显示图片

用OpenGL进行立方体表面纹理贴图

应用纹理贴图