有没有人知道一个好的教程或文档,涉及使用C++混合OpenCV
和OpenGL
,与计算机视觉
和3D渲染相关?
我想创建虚拟场景,并使用OpenCV找到对象的三维姿态
,以便与已知的OpenGL位置进行比较,但是目前我没有找到太多“高质量”的信息。例如,我需要opengl相机的内部参数,以便在3D世界中使用OpenCV检测对象。
有没有人知道一个好的教程或文档,涉及使用C++混合OpenCV
和OpenGL
,与计算机视觉
和3D渲染相关?
我想创建虚拟场景,并使用OpenCV找到对象的三维姿态
,以便与已知的OpenGL位置进行比较,但是目前我没有找到太多“高质量”的信息。例如,我需要opengl相机的内部参数,以便在3D世界中使用OpenCV检测对象。
混合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);
// ...
}
Init(false)
。如果您想要更高级的位深度和模板缓冲区等功能,请使用操作系统的窗口句柄自行初始化OpenGL。有很多教程可以帮助您完成这个过程。