使用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读取图片进行纹理贴图的更多相关文章

  1. [OpenCV] 1、读取图片

    >_<" 安装及配置请看http://www.cnblogs.com/zjutlitao/p/4042074.html >_<" 这篇是一个简单的在VS20 ...

  2. [python3.6+opencv] 01 完成读取图片操作

    学习一下opencv3 奈何vs2017配的云里雾里,还是使用python吧 --人生苦短,python来凑 --使用Pycharm操作,面向界面的Pycharm好一些吧(我猜的) 新建Project ...

  3. opengl学习笔记(三):经过纹理贴图的棋盘

    opengl纹理贴图的步骤: 1:创建纹理对象,并为它指定一个纹理 2:确定纹理如何应用到每个像素上 3:启用纹理贴图功能 4:绘制场景,提供纹理坐标和几何图形坐标 注意:纹理坐标必须在RGBA模式下 ...

  4. 【opencv】c++ 读取图片 & 绘制点 & 绘制文字 & 保存图片

    //read pic ]; sprintf(path, "%s%d/%s", image_dir.c_str(), cam_num, filename.c_str()); cv:: ...

  5. Asp.net从文件夹中读取图片,随机背景图

    第一步:配置文件web.config里添加 <system.web><connectionStrings> <!--name 是自定义的,connectionString ...

  6. 基于Cocos2d-x学习OpenGL ES 2.0系列——纹理贴图(6)

    在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...

  7. (转载)Cocos2dx-OpenGL ES2.0教程:纹理贴图(6)

    在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...

  8. Directx11学习笔记【十七】纹理贴图

    本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5596180.html 在之前的例子中,我们实现了光照和材质使得场景 ...

  9. opengl学习笔记(四):openCV读入图片,openGL实现纹理贴图

    在opengl中实现三维物体的纹理贴图的第一步就是要读入图片,然后指定该图片为纹理图片. 首先利用opencv的cvLoadImage函数把图像读入到内存中 img = cvLoadImage(); ...

随机推荐

  1. day4函数文件操作

    一.高效读取文件 1.使用with打开文件,程序运行完后会自动关闭打开的文件 2.修改文件,将文件中的123替换为a(简单粗暴方式) 3.打开两个文件,修改后将旧文件删除,将新文件名字改成旧文件的名称 ...

  2. C#_02.16_基础七_.NET表达式&运算符

    C#_02.16_基础七_.NET表达式&运算符 一.字面量: 字面量和变量的关系来理解字面量会比较简单: 因此字面量是源代码中键入已知的(我们知道它是多少的)值.也可以理解是等号右边的非创建 ...

  3. jquery自带的进度条功能如何使用?

    弹出进度条:先做弹出的功能modal,再做进度条显示.在弹出的界面上增加进度条功能 $.ajax({ xhr: function() { var xhr = new window.XMLHttpReq ...

  4. golang dlv 远程调试

    因为不知道delvel 是如何设置源码的,本地编译的上传到服务器上,服务器要调试看不到源码,很是忧伤,所以干脆使用远程调试吧: 在服务器上 ps x|grep game 查找到gameserver的进 ...

  5. jQuery CSS 操作 - offset() 方法

    今天在一个页面需要知道jquery版本号,来决定使用什么样的方法,有以下方式可以获取到 $.fn.jquery $.prototype.jquery 这两种方式都可以获取到jquery的版本号 --- ...

  6. centos 安装gitee备忘

    centos 安装gitee备忘:安装前需要升级git.需要安装mysql阿里云主机需要把端口加入例外需要修改全局配置文件把localhost改为ip需要设置为后台运行

  7. Darwin Streaming Server服务器mp4文件点播返回”415 Unsupported Media Type“错误

    Darwin Streaming Server中mp4文件点播失败,通过抓包发现服务器返回”415 Unsupported Media Type“错误,如下: RTSP/ Unsupported Me ...

  8. MyBatis中使用实体中使用枚举,数据库中使用数值

    一.简介 本文主要讲MyBatis中使用实体中使用枚举,数据库中使用数值的解决方案.正常直接使用会报错,需要添加typeHandlers在mybatis-config.xml中. 二.解决方案 如下: ...

  9. 朗科32G TF卡的读写测试

    卡是这样的, 下面是实际测试的结果. 容量测试 SKS的USB2外置读卡器, X240内置读卡器加上SD卡套    UNITEK的USB3.0读卡器, 经过UNITEK的USB3.0 HUB 看来读4 ...

  10. MATLAB 条形图添加多个图例

    MATLAB 条形图添加多个图例: 1)只有一个图例: 2)两个图例: