OpenGL——OpenCV与SOIL读取图片进行纹理贴图
使用OpenCV读取图片代码如下
/*传入的参数
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\n", m_fileName);
return -;
}
//设置长宽
int width = img.cols;
int height = img.rows;
int channel = img.channels();
printf(" depth %d\n", channel); //获取图像指针
int pixellength = width * height * channel;
GLubyte* pixels = new GLubyte[pixellength];
memcpy(pixels, img.data, pixellength * sizeof(char));
//imshow("OpenCV", img); glGenTextures(, &m_textureObj);
glBindTexture(m_textureTarget, m_textureObj);
//必须一个RGB 一个BGR(opencv的mat类的颜色通道是BGR) 否则会出现颜色偏差
glTexImage2D(m_textureTarget, , GL_RGB, width, height, , 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, );
free(pixels);
运行程序时,出现了两个问题:
- 纹理贴图是黑白的——解决方案:读取的图片的高和宽的大小改为2的倍数即可
- 贴图颜色出现偏差——解决方案:(原因见上)
glTexImage2D(m_textureTarget, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, pixels);
使用SOIL读取图片代码如下
int picWidth, picHeight;
int channel = ; 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 << "\n";
return false;
} //产生指定数量的纹理对象,并将他们的引用句柄放到GLuint数组指针中
glGenTextures(, &m_textureObj);
//告诉OpenGL后面所有和纹理相关调用中所引用的是该次绑定的纹理对象,直到新的对象被绑定
glBindTexture(m_textureTarget, m_textureObj);
glTexImage2D(m_textureTarget, , GL_RGB, picWidth, picHeight, , 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, );
SOIL_free_image_data(imageData);
OpenGL——OpenCV与SOIL读取图片进行纹理贴图的更多相关文章
- [OpenCV] 1、读取图片
>_<" 安装及配置请看http://www.cnblogs.com/zjutlitao/p/4042074.html >_<" 这篇是一个简单的在VS20 ...
- [python3.6+opencv] 01 完成读取图片操作
学习一下opencv3 奈何vs2017配的云里雾里,还是使用python吧 --人生苦短,python来凑 --使用Pycharm操作,面向界面的Pycharm好一些吧(我猜的) 新建Project ...
- opengl学习笔记(三):经过纹理贴图的棋盘
opengl纹理贴图的步骤: 1:创建纹理对象,并为它指定一个纹理 2:确定纹理如何应用到每个像素上 3:启用纹理贴图功能 4:绘制场景,提供纹理坐标和几何图形坐标 注意:纹理坐标必须在RGBA模式下 ...
- 【opencv】c++ 读取图片 & 绘制点 & 绘制文字 & 保存图片
//read pic ]; sprintf(path, "%s%d/%s", image_dir.c_str(), cam_num, filename.c_str()); cv:: ...
- Asp.net从文件夹中读取图片,随机背景图
第一步:配置文件web.config里添加 <system.web><connectionStrings> <!--name 是自定义的,connectionString ...
- 基于Cocos2d-x学习OpenGL ES 2.0系列——纹理贴图(6)
在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...
- (转载)Cocos2dx-OpenGL ES2.0教程:纹理贴图(6)
在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...
- Directx11学习笔记【十七】纹理贴图
本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5596180.html 在之前的例子中,我们实现了光照和材质使得场景 ...
- opengl学习笔记(四):openCV读入图片,openGL实现纹理贴图
在opengl中实现三维物体的纹理贴图的第一步就是要读入图片,然后指定该图片为纹理图片. 首先利用opencv的cvLoadImage函数把图像读入到内存中 img = cvLoadImage(); ...
随机推荐
- 小甲鱼Python第十讲课后题---
0. 下边的列表分片操作会打印什么内容? >>> list1 = [1, 3, 2, 9, 7, 8]>>> list1[2:5] [2,9,7] 1.请问 lis ...
- C/JS_二分法查找
1. 二分法查找 前提: 数据是排好序的. 题设:给出一个有序arr,从中找出key,arr的区间是array[ low , higt]. 步骤: (1)mid=(low+high)/2 (2)arr ...
- PHP07
PHP07 1.cookie 2.使用php操作cookie 设置响应头(header)中的Set-Cookie可以下发小票 检查-network-响应头处可查看所设置cookie 检查-applic ...
- Hibernate(5)session的方法
1. Session缓存 Session缓存(Hibernate一级缓存),在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存.只要 Se ...
- CSS魔法堂:Flex布局
前言 Flex是Flexible Box的缩写,就是「弹性布局」.从2012年已经面世,但由于工作环境的原因一直没有详细了解.最近工作忙到头晕脑胀,是要学点新东西刺激一下大脑,打打鸡血. Flex就 ...
- PL/SQL学习笔记程序单元
一:程序单元组成 一个PL/SQL程序单元主要包括三部分: 声明与定义部分:声明变量.常量.类型等:定义过程.函数等: 执行部分:执行PL/SQL语句:调用过程.参数:处理游标等: 异常处理部分:处理 ...
- 每天一个linux命令:vmstat
1.命令简介 vmstat(Virtual Memory Statistics 虚拟内存统计) 命令用来显示Linux系统虚拟内存状态,也可以报告关于进程.内存.I/O等系统整体运行状态. 2.用法 ...
- C#缓存absoluteExpiration、slidingExpiration两个参数的疑惑
看了很多资料终于搞明白cache中absoluteExpiration,slidingExpiration这两个参数的含义. absoluteExpiration:用于设置绝对过期时间,它表示只要时间 ...
- webstorm快捷键 webstorm keymap内置快捷键英文翻译、中英对照说明
20160114参考网络上的快捷键,整理自己常用的: 查找/代替shift+shift 快速搜索所有文件,简便ctrl+shift+N 通过文件名快速查找工程内的文件(必记)ctrl+shift+al ...
- Effective Java 第三版——62. 当有其他更合适的类型时就不用字符串
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...