相关疑难解决方法(0)

将数据从glReadPixels()转换为OpenCV :: Mat

我想通过glReadPixels()从动画中获取每个OpenGL帧,并将数据转换为OpenCV :: Mat.我知道glReadPixels()从左到右按行从下一行到上一行获取数据.另一方面,OpenCV以不同方式存储数据.

有没有人知道任何库或任何帮助我将数据从glReadPixels转换为OpenCV的教程/示例: C++中的Mat

摘要

 OpenGL frame      ----------------------->        CV::Mat

Data from left to right,                    Data from left to right,
bottom to top.                              top to bottom.
Run Code Online (Sandbox Code Playgroud)

c++ opengl opencv glreadpixels

21
推荐指数
1
解决办法
1万
查看次数

使用OpenCV加载OpenGL的纹理

我已经看到许多代码示例用于为OpenGL加载纹理,其中许多代码有点复杂,无法理解或需要使用大量代码的新函数.

我在想,由于OpenCV允许我们加载任何图像格式,它可以是一种简单有效的方法来加载纹理到OpenGL,但我遗漏了一些东西.我在c ++中有这段代码:

cv::Mat texture_cv;
GLuint texture[1];
int Status=FALSE;

if( texture_cv = imread("stones.jpg"))  {

        Status=TRUE;                            // Set The Status To TRUE
        glGenTextures(1, &texture[0]);                  // Create The Texture


        glBindTexture(GL_TEXTURE_2D, texture[0]);               
        glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
        glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
        glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S , GL_REPEAT );
        glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );

        glTexImage2D(GL_TEXTURE_2D, 0, 3, texture_cv.cols, texture_cv.rows, 0, GL_RGB, GL_UNSIGNED_BYTE, texture_cv.data);
}
Run Code Online (Sandbox Code Playgroud)

由于这个错误,它没有编译:

错误C2451:类型'cv :: Mat'的条件表达式是非法的

有什么建议?我该如何从cv :: Mat转换为openGL纹理?

c++ opengl opencv textures

6
推荐指数
1
解决办法
8420
查看次数

将OpenGL纹理收敛到OpenCV矩阵

我一直在寻找一种将OpenGL纹理转换为OpenCV矩阵类型的方法。我发现了许多指南,这些指南显示了从OpenCV矩阵到OpenGL纹理的转换,但不幸的是却没有相反的方法。我也阅读了此内容及其答案,但并没有使我变得更明智。我正在用C ++编写并使用OpenCV3.1和OpenGL4.4。

编辑:更新的代码

main.cpp:

#include "CameraCapture.h"
#include "GUIMainWindow.h"
#include "glfw3.h"
#include "Texture.h"

using namespace std;

int main(int argc, char* argv[]) {

    if (!glfwInit()) {
        fprintf(stderr, "Failed to initialize GLFW \n");
        return -1;
    }

    glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
    GLFWwindow* window = glfwCreateWindow(1929, 1341, "OpenGL", NULL, NULL);

    if (window == NULL) {
        fprintf(stderr, "Failed to make GLFW window.");
        glfwTerminate();
        return -1;
    }

    glfwMakeContextCurrent(window);

    CameraCapture *cc = new CameraCapture();
    cc->CameraCapture::AvailableCameras();
    GLuint texture = cc->CameraCapture::OpenCamera(0);

    glEnable(GL_TEXTURE_2D);

    glBindTexture(GL_TEXTURE_2D, texture);

    drawGLTexture(window);

    Mat out = …
Run Code Online (Sandbox Code Playgroud)

c++ opengl opencv

5
推荐指数
1
解决办法
2092
查看次数

标签 统计

c++ ×3

opencv ×3

opengl ×3

glreadpixels ×1

textures ×1