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

标签 c++ opencv opengl computer-vision

<分区>

有没有人知道有关在 C++ 中混合 OpenCVOpenGL 以及与 Computer Vision 和 3D 渲染相关的好的教程或文档?

我想用对象创建虚拟场景,然后使用 OpenCV 找到对象的 3D 姿势,这样我就可以与已知的 OpenGL 位置进行比较,但到目前为止我没有找到太多“质量”信息。例如,我需要 opengl 相机的固有参数,以便使用 OpenCV 检测 3D 世界中的物体等。

最佳答案

混合 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);

    // ...
}

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

关于c++ - OpenGL 与 OpenCV 相结合的计算机视觉教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9095124/

相关文章:

c++ - 如何仅使用 boost 将字符串编码为 base64?

opencv - 比较opencv中的颜色配置文件

c++ - 颜色直方图openCV中的访问维度

c++ - 更快的均值计算(openCV,C++)

opengl - 使用GLUT位图字体

c++ - QGLWidget 中的渲染和颜色选择 : how to cope with both

c++ - 在 C++ 中,相等运算符中两个 = 之间的空格是否合法?

c++ - 仅编译1个cpp文件时出现问题: “make: *** No rule to target '所需的 'executable' build/main.o。停止。”

c++ - 为什么const变量在C++中是左值?

c++ - 将 OpenGL 转换为 PNG