OpenGL——OpenCV与SOIL读取图片进行纹理贴图
生活随笔
收集整理的這篇文章主要介紹了
OpenGL——OpenCV与SOIL读取图片进行纹理贴图
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
使用OpenCV讀取圖片代碼如下
/*傳入的參數(shù)
std::string m_fileName;
GLenum m_textureTarget = GL_TEXTURE_2D;
GLuint m_textureObj;
*/
Mat img = imread(m_fileName);
if (img.empty())
{
fprintf(stderr, "Can not load image %s
", m_fileName);
return -1;
}
//設(shè)置長寬
int width = img.cols;
int height = img.rows;
int channel = img.channels();
printf(" depth %d
", channel);
//獲取圖像指針
int pixellength = width * height * channel;
GLubyte* 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) 否則會出現(xiàn)顏色偏差
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);
運行程序時,出現(xiàn)了兩個問題:
紋理貼圖是黑白的——解決方案:讀取的圖片的高和寬的大小改為2的倍數(shù)即可
貼圖顏色出現(xiàn)偏差——解決方案:(原因見上)
glTexImage2D(m_textureTarget, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, pixels);
使用SOIL讀取圖片代碼如下
int picWidth, picHeight;
int channel = 0;
unsigned char* imageData = SOIL_load_image(m_fileName.c_str(), &picWidth, &picHeight, &channel, SOIL_LOAD_RGB);
if (imageData == NULL)
{
fprintf(stderr, "Can not load image ");
std::cout << m_fileName << "
";
return false;
}
//產(chǎn)生指定數(shù)量的紋理對象,并將他們的引用句柄放到GLuint數(shù)組指針中
glGenTextures(1, &m_textureObj);
//告訴OpenGL后面所有和紋理相關(guān)調(diào)用中所引用的是該次綁定的紋理對象,直到新的對象被綁定
glBindTexture(m_textureTarget, m_textureObj);
glTexImage2D(m_textureTarget, 0, GL_RGB, picWidth, picHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);
//紋理放大縮小使用線性插值
glTexParameterf(m_textureTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(m_textureTarget, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glBindTexture(m_textureTarget, 0);
SOIL_free_image_data(imageData);
總結(jié)
以上是生活随笔為你收集整理的OpenGL——OpenCV与SOIL读取图片进行纹理贴图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝字冲销是什么意思_梦见上学 做梦梦到上
- 下一篇: frp安装部署指南