OpenGL——OpenCV读取图片进行纹理贴图

使用OpenCV读取图片代码如下

    img = imread(m_fileName);

    if (img.empty())
    {
        fprintf(stderr, "Can not load image %s\n", m_fileName);
        return -1;
    }
    //设置长宽
    int width = img.cols;
    int height = img.rows;
    int channel = img.channels();
    printf(" depth  %d\n", channel);

    //获取图像指针
    int pixellength = width * height * channel;
    pixels = new GLubyte[pixellength];
    memcpy(pixels, img.data, pixellength * sizeof(char));
    //imshow("OpenCV", img);

    glGenTextures(1, &m_textureObj);
    glBindTexture(m_textureTarget, m_textureObj);
    //必须一个RGB  一个BGR(opencv的mat类的颜色通道是BGR) 否则会出现颜色偏差
    glTexImage2D(m_textureTarget, 0, GL_RGB, width, height, 0, 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, 0);
    free(pixels);

运行程序时,出现了两个问题:

  • 纹理贴图是黑白的——解决方案:读取的图片的高和宽的大小改为2的倍数即可
  • 贴图颜色出现偏差——解决方案:(原因见上)
    glTexImage2D(m_textureTarget, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, pixels);

原文地址:https://www.cnblogs.com/farewell-farewell/p/9581674.html

时间: 2024-10-10 15:40:19

OpenGL——OpenCV读取图片进行纹理贴图的相关文章

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

在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-Projection)变换. 本文将在教程4的基础之上,添加纹理贴图支持.最后,本文会把纹理贴图扩展至3D立方体上面. 基本方法 当我们把一张图片加载到内存里面之后,它是不能直接被GPU绘制出来的,纹理贴图过程如下: 首先,我们为之前的顶点添加纹理坐标属性并传到vertex shader里面去: 然后

OpenGL ES课程VI之纹理贴图(原文对照)

http://www.educity.cn/wenda/92368.html OpenGL ES教程VI之纹理贴图(原文对照) OpenGL ES Tutorial for Android – Part VI – Textures December 30th, 2010 by Per-Erik Bergman — Android, Embedded, Java Last tutorial we worked a bit more on meshes and we have also talked

Opencv读取图片像素值并保存为txt文件

#include <opencv2/opencv.hpp>#include<vector>#include <fstream> using namespace std;using namespace cv; int main(int argc, char* argv[]){ const char* imagename = "2.jpg"; //从文件中读入图像 Mat img = imread(imagename); ofstream outfile

[OpenCV] 1、读取图片

>_<" 安装及配置请看http://www.cnblogs.com/zjutlitao/p/4042074.html >_<" 这篇是一个简单的在VS2012里运行的openCV读取图片并显示的简单例子 1 #include <stdio.h> 2 #include <opencv2/opencv.hpp> 3 using namespace std; 4 using namespace cv; 5 int main(int argc,

Opencv读取各种格式图片,在TBitmap上面重绘

//opencv读取图片 cv::Mat image; //const char *fileName = "HeadImage-UI/Photo-001.bmp"; const char *fileName = "HeadImage-UI/53d253192be47412.jpg!200x200.jpg"; image = cv::imread(fileName); //bitmap冲回image Graphics::TBitmap *bitmap = new Gr

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

本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5596180.html 在之前的例子中,我们实现了光照和材质使得场景大大增加了真实感,然而材质提供的细节只是在顶点级别上,要想在像素级别提供细节还得借助于纹理,这次让我们学习dx11中一些有关纹理的基础. 1.纹理坐标 1 在direct3d中,纹理坐标用一个二维向量(u,v)表示,纹理左上角为原点,u正方向沿纹理水平向右,v正方向沿纹理垂直向下,且0<=u,v<

Opencv 导入图片 Opengl 显示纹理(含用例代码)

本篇主要是讲使用Opencv导入一副图片,然后讲该副图片当成纹理显示在opengl当中. 首先说如何配置Opencv 我的硬件环境是: Windows10+Visual Studio 2015+opencv3.0 先在此网站下载opencv,下载之后,它是长这样的,点击它,会自动解压缩成名字为"opencv"的文件夹 接下来进行环境配置:从控制面板开始,按着这个路径  Control Panel\System and Security\System 来到高级系统设置(advanced

(转)使用OpenGL显示图像(七)Android OpenGLES2.0——纹理贴图之显示图片

转:http://blog.csdn.net/junzia/article/details/52842816 前面几篇博客,我们将了Android中利用OpenGL ES 2.0绘制各种形体,并在上一篇博客中专门讲了GLSL语言.但是我们看到的基于OpenGL开发的应用和游戏,可不仅仅是那些规则形体和一些简单的色彩构成,而是各种不规则的形体构成了现实世界或者卡通世界的人和事物,他们都是外面穿着漂亮“衣服”的.本篇博客就是来讲解这些“衣服”的基础的.这些衣服就是纹理贴图. 什么是纹理贴图 一般说来

opencv用imread( argv[1], 1)读取图片

显示一幅图:主要是运用功能:imread namedWindow imshowimread:从字面意思我们就可以看懂,用来读取图片的:namedWindow:显然,我们也可以看到这是用来命名窗口名称的:imshow:这个自然就是来显示窗口的,窗口内的当然就是要显示的图片了. 代码来自OpenCV Tutorials 这个文件很好用的,推荐~代码仅供参考: #include<cv.h>   //cv.h OpenCV的主要功能头文件,务必要:#include<highgui.h> /