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读取图片进行纹理贴图的主要内容,如果未能解决你的问题,请参考以下文章
Opencv 导入图片 Opengl 显示纹理(含用例代码)