OpenGL与OpenCV相结合的计算机视觉教程

Jav*_*ock 8 c++ opengl opencv computer-vision

有没有人知道一个很好的教程或文档,处理混合OpenCVOpenGLC++,与Computer Vision3D渲染相关?

我想用对象创建虚拟场景,然后object's 3D poses使用OpenCV 查找,所以我可以与已知的OpenGL位置进行比较,但到目前为止我没有找到太多"质量"信息.例如,我需要opengl相机的内部参数,以便使用OpenCV来检测3D世界中的对象等.

the*_*ine 3

混合 OpenGL 和 OpenCV 没有什么困难。这些只是两个库,一个用于图形,另一个用于计算机视觉。没有重叠,因此您可以将两者都包含在您的项目中。

然后应该是渲染一些矩形或盒子(或者您希望使用 OpenCV 定位的任何内容) - 有很多相关教程,然后使用 glReadPixels() 函数将渲染数据复制到客户端内存并传递该数据到 OpenCV。

很可能没有教程,因为它太简单了......

你可以:

void onDisplay(void* param)
{
    glClearColor(0, 1, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT); // Make a green window.
}

...

void MyClass::MyInit(bool useCustomInit)
{
    std::string winname = "MyWnd";
    if (useCustomInit) {
        namedWindow(winname, CV_WINDOW_NORMAL);
        resizeWindow(winname, 640, 480);
        auto handle = cvGetWindowHandle(winname.c_str());
        InitializeOpenGL(handle); // your custom OpenGL initialization.
    } else {
        namedWindow(winname, CV_WINDOW_NORMAL | CV_WINDOW_OPENGL);
        resizeWindow(winname, 640, 480);
    }
    void *param_value = reinterpret_cast<void*>(this); // Can e.g. do this or just use nullptr.
    setOpenGlDrawCallback(winname, onDisplay, param_value);

    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果您对默认 OpenGL 窗口感到满意,则可以使用Init(false). 如果您想要奇特的位深度和模板缓冲区等等,请使用操作系统的窗口句柄自行初始化 OpenGL。确实有很多教程可以做到这一点。

  • 使用 OpenGL 需要进行一些设置并创建上下文。帧缓冲区、深度缓冲区、模板缓冲区、着色器等……需要设置并与窗口连接。问题可能是如何将 OpenGL 上下文与 OpenCV 窗口连接起来…… (2认同)