在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的纹理图片的实现方法相关推荐

  1. 利用OpenCV读取和写入视频

    简 介: 本文介绍了如何对三种不同的视频源(视频文件, 序列图片以及网络摄像头)来进行读取显示视频,使用视频捕获对象. 也给出了如何通过视频捕获对象获取视频流的重要元数据. 介绍了使用视频写入对象把视 ...

  2. opencv java 显示图片_【opencv三】利用opencv读取显示图片

    在opencv中读取显示图片的头文件是highgui.hpp. 整体代码如下,如要测试自己的图片,需要将代码段中的图片地址更改为自己图片的绝对路径. #include "opencv2/hi ...

  3. 利用OpenCv读取一张图片并显示

    import cv2 # 读图片 image = cv2.imread('end.png') # 将图片转化为灰度图像 img = cv2.cvtColor(image, cv2.COLOR_BGR2 ...

  4. Python利用Opencv读取图片

    首先,要先确认PyCharm里面有没有装opencv-python.如果没有,点右侧+号搜索添加. 确认有opencv之后,便可以使用cv2读取图片了 import cv2image_path = & ...

  5. C++ Opencv 读取指定路径中的所有文件(图片)及指定路径中指定格式的所有文件(图片)

    读取指令路径下的所有文件,程序如下: #include <io.h> #include < fstream> #include < string> #include ...

  6. 【opencv四】利用opencv读取显示视频

    在opencv中读取显示视频的头文件是highgui.hpp.视频图像处理头文件imgproc.hpp. 整体代码如下,如要测试自己的图片,需要将代码段中的图片地址更改为自己图片的绝对路径. #inc ...

  7. c语言读取png文件大小,求助: C语言- 利用libpng读取png大小,并转换为jpg类型图片...

    大家好, 最近研究C语言图像处理这方面遇到一个难题,详情如下: 目标: 将png类型图片的信息读入内存,提取所需要的数据并保存,然后转换为如jpg等其它图片格式. 1. libpng库已经装好,通过m ...

  8. 利用OpenCV读取大华网络摄像头

    项目需要将网络摄像头接入到服务器上,用c++或者python处理每帧的图像.查了很多资料总算解决了,回过头发现是很小的问题,但是大华官网的SDK真的很难看懂.OpenCV2.4. 直接上代码吧. #i ...

  9. OpenCV读取多幅图片,读取系列图片,读取文件夹中指定图像类型的系列图片

    读取系列图片通常是将文件夹中的所有文件名保存在txt中,再读取,如链接和链接所示.这是通常的操作方法. 之前写过一篇利用OpenCV读取系列图片的例子,参见链接,但是,实际应用中并不能改变文件名,本文 ...

最新文章

  1. 模板模式(C++) 【转】
  2. (8) Xamarin使用Jar檔
  3. TCP/IP 2.5浮动静态路由
  4. jquery 点击事件
  5. 前端学习(2702):重读vue电商网站23之element-ui 如何按需导入
  6. python论文参考文献5篇_“送”5篇SCI论文,意味着什么?
  7. 克隆网站工具_4 种开源云安全工具
  8. 希尔排序和归并排序(java实现)
  9. python 学堂在线_学习Python编程学堂在线试题及答案
  10. 基于java的条形码生成、读取和打印
  11. java十进制_JAVA 十进制 转换成 三进制
  12. 用python打印学生名单_Python 之 MySql 每日一练 231——查询1990年出生的学生名单...
  13. GNN-CS224W: 6-7 Graph Neural Networks
  14. python制作简单动画_把数据摇起来!用Python制作动画可视化效果!
  15. 力扣122题:买卖股票的最佳时机 II
  16. 哪种品牌台灯适合学生用?盘点学生护眼台灯十大牌子
  17. rally功能分析与使用介绍
  18. 杰理之设备配网及使用第三方平台【篇】
  19. plt.scatter(X[0, :], X[1, :], c=Y, s=40, cmap=plt.cm.Spectral)出错
  20. LabVIEW视觉采集软件(VAS)、视觉生成器(VB)和视觉开发模块(VDM)之间有什么不同

热门文章

  1. action标签的使用
  2. Integer类对象池与==问题:Integer a=34556,b=34556;但a==b为false
  3. (SpringMVC)RestFul和Controller
  4. java 利用dfs生成简单的随机迷宫(效率不高)
  5. html页面提交数据,利用servlet接收数据并写进xml中
  6. small android,Android-Small框架-基础
  7. ai钢笔工具怎么描线_AI钢笔工具技巧,怎么画出完美的贝塞尔曲线
  8. vs中列表分页符代码_电脑办公技巧Excel中Ctrl+K的使用技巧(十二)/Word2016中快速删除分页符与空白页的方法...
  9. python测试用例图_pytest以函数形式的测试用例
  10. 录音转成文字 android,安卓手机自带的录音转文字功能这么强大,堪称会议神器!你会用吗...