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(); ...
随机推荐
- 通过pip安装python web
提示 No module named 'utils' 我就pip install utils 提示 No module named 'db' 然后我就 pip install db 报错 No mod ...
- django之Ajax初识
Ajax准么说是用于Javascript与服务器端进行交互的,我们之前呢没有了解ajax也同样可以完成与服务器的交互,那么ajax的优势在哪里?首先ajax是异步交互的也就是说我们基本不会遇到卡顿现象 ...
- ORACLE数据恢复方法(提交事务也可以)
今天在操作数据库的时候,发现数据操作错误,想要恢复,但是没有用事务,按理说,设置成不默认提交事务,此时所做的各种操作都没有反应到数据库中.这时,你可以rollback事务,撤销所有未提交的修改.不过, ...
- HEVC与VP9之间的对比
在streamingmedia上看到的一篇对比HEVC与VP9的文章,挺不错.另外这边文章的几个comment也是不错的. 下面是全文. The Great UHD Codec Debate: G ...
- .net core使用数据库
.net core使用数据库 .net core 通过可以通过ef core或其它ORM框架进行数据访问.此处使用EF和Dapper作为示例. 使用EF Core访问数据库 与 .NET Framew ...
- 在Mac平台上安装配置ELK时的一些总结
一.前言 大数据处理是流行的一些表现,在不断壮大的数据处理中,怎么样处理数据才是我们继续做好开发的正道.本文章来自网络,不敢原创,但是也有很大借鉴. 二.MAC安装ELK 首先是安装elast ...
- Android 获取Activity当前view
View cv = getWindow().getDecorView(); 来自为知笔记(Wiz)
- ROC曲线-阈值评价标准
ROC曲线指受试者工作特征曲线 / 接收器操作特性曲线(receiver operating characteristic curve), 是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性 ...
- 安装sqlserver后 服务启动过几秒就自动停止
今天安装sqlserver2014后 发现启动2014的服务,过几秒就会自动停止 通过查看windows日志发现是系统库路径报错~ google了下 发现 "重新生成系统库"就能解 ...
- SQL Server 2016新特性:Live Query Statistics
SSMS可以提供可以查看正在执行的计划.live query plan可以查看一个查询的执行过程,从一个查询计划操作到另外一个查询计划操作.live query plan提供了整体的查询运行进度和操作 ...