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

Tutorial on OpenGL combined with OpenCV for Computer Vision

本文关键字:计算机视觉 教程 结合 OpenCV OpenGL      更新时间:2023-10-16

有人知道一本关于在C++中混合OpenCVOpenGL、与Computer Vision和3D渲染相关的好教程或文档吗?

我想用对象创建虚拟场景,然后使用OpenCV找到object's 3D poses,这样我就可以与已知的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。真的有很多这样做的教程。