如何用opengl绘制cv :: UMat数据?

时间:2017-12-13 14:00:38

标签: c++ opengl opencl

我找到了一个函数,以便将cv :: Mat转换为纹理并且它可以工作:

GLuint matToTexture(cv::Mat &mat, GLenum minFilter, GLenum magFilter, GLenum wrapFilter)
{
    // Generate a number for our textureID's unique handle
    GLuint textureID;
    glGenTextures(1, &textureID);

    // Bind to our texture handle
    glBindTexture(GL_TEXTURE_2D, textureID);

    // Set texture interpolation methods for minification and magnification
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter);

    // Set texture clamping method
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapFilter);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapFilter);

    // Create the texture
    glTexImage2D(GL_TEXTURE_2D,     // Type of texture
             0,                 // Pyramid level (for mip-mapping) - 0 is the top level
             GL_RGB,            // Internal colour format to convert to
             mat.cols,          // Image width  i.e. 640 for Kinect in standard mode
             mat.rows,          // Image height i.e. 480 for Kinect in standard mode
             0,                 // Border width in pixels (can either be 1 or 0)
             GL_BGR, // Input image format (i.e. GL_RGB, GL_RGBA, GL_BGR etc.)
             GL_UNSIGNED_BYTE,  // Image data type
             mat.data);        // The actual image data itself

    glBindFramebuffer(GL_TEXTURE_2D, textureID);

    return textureID;
}

// example of usage
GLuint tex = matToTexture(mat, GL_NEAREST, GL_NEAREST, GL_CLAMP);
glBindTexture(GL_TEXTURE_2D, tex);

有没有办法直接将 cv :: UMat 数据转换为opengl纹理(不转换为cv :: Mat)?

0 个答案:

没有答案