利用opencv读取图片将其作为opengl的纹理图片的实现方法
来源:互联网 发布:无所事事 知乎 编辑:程序博客网 时间:2024/06/04 08:50
利用opencv读取图片将其作为opengl的纹理图片的实现方法
在opengl中实现三维物体的纹理贴图的第一步就是要读入图片,然后指定该图片为纹理图片。我最早接手的项目中是通过一个专门的读取bmp图片的函数来实现纹理图片的读取的。这个函数有三个缺点:
1、只能读取bmp的图片,无法读取jpg,ppm等其他类型的图片,要想使用其他类型的图片,必须事先将他们转化成bmp的图片;
2、只能读取2的幂次方宽和2的幂次方长的大小的图片,否则函数无法正确读取图片内容;
3、只能读取24位的bmp图片。
上述三个缺点使我们的程序有了很大的局限性。为此,在学习了opencv之后,我利用opencv中的cvloadimage()函数解决了上述问题。
我们的解决方法如下:
首先利用下面这行代码将图片读取到内存中:
IplImage * Iface = cvLoadImage(szFileName);
然后利用下面代码在内存中开辟一个跟读入图片大小相同的内存空间:
m_new_face_BMPbytes = (unsigned char *)malloc(sizeof(unsigned char)*Iface->imageSize);
如果我们读取的是24位的rgb彩色图片,那么Iface->imageSize几位图片的像素大小乘以3,比如我们的图片是512*512大小的那么Iface->imageSize就是512*512*3.
接着我们利用下面的代码将Iface中的图片的实际数据部分拷贝到我们制定的内存空间中:
memcpy(m_new_face_BMPbytes,Iface->imageData,sizeof(unsigned char)*Iface->imageSize);
Iface->imageData为存储图片像素数据的空间的首地址
然后我们保存图片的大小:
m_new_face_width = Iface->width;
m_new_face_Height = Iface->height;
最后我们设置将m_new_face_BMPbytes指向的图片数据制定为opengl中的纹理图片:
glGenTextures(1, &m_texName); //1表示生成纹理的数量,m_texName用来存储生成纹理的索引,在绑定纹理的时候用到
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glDisable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, m_new_face_width, m_new_face_Height, 0,
GL_BGR_EXT, GL_UNSIGNED_BYTE, m_new_face_BMPbytes);
这样我们就完成了将我们读入的图片设置成为opengl的纹理图片的设置了。
- 利用opencv读取图片将其作为opengl的纹理图片的实现方法
- 利用opencv读取图片将其作为opengl的纹理图片的实现方法
- 利用opencv读取图片将其作为opengl的纹理图片的实现方法
- 利用opencv读取图片将其作为opengl的纹理图片的实现方法
- 使用glfw库将OpenCV读取到的图片作为OpenGL的背景纹理贴图
- openCV读入图片,openGL实现纹理贴图
- windows下利用gdi+读取图片并转换成opengl纹理支持的像素格式
- OpenGL载入图片作为纹理
- 将opengl的绘制效果利用OpenCV、Matlab保存成图片
- openCV读取文件夹下多张图片的方法
- OpenGL-纹理读取BMP图片-代码
- opengl利用SOIL加载图片dds纹理
- 读取图片文件将其转为二进制,再生成新的图片
- 利用OpenCV将连续的图片写入视频
- 读取图片的方法
- OpenCV入门二:OpenCV读取一张图片显示,并将其重写为灰度图
- OpenGL中用bmp图片做纹理贴图的三种方法
- opencv批量读取图片的三种常见方法
- 伤我最深,记得最真的句子:QQ伤感日志
- cvpr常用资源整理
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
- 编译器的优化
- Mongodb源码分析--插入记录及索引B树构建 .
- 利用opencv读取图片将其作为opengl的纹理图片的实现方法
- ODBC in Win7
- 你的脸在我的记忆里变得模糊不清:伤感日志
- 有关static的问题
- JDBC: Statement、PreparedStatement和CallableStatement
- Oracle与MySql函数
- 数据结构——编程珠玑
- opengl中的纹理映射
- Java多态性详解——父类引用子类对象