Jav*_*ock 8 c++ opengl opencv computer-vision
有没有人知道一个很好的教程或文档,处理混合OpenCV和OpenGLC++,与Computer Vision3D渲染相关?
我想用对象创建虚拟场景,然后object's 3D poses使用OpenCV 查找,所以我可以与已知的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);
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您对默认 OpenGL 窗口感到满意,则可以使用Init(false). 如果您想要奇特的位深度和模板缓冲区等等,请使用操作系统的窗口句柄自行初始化 OpenGL。确实有很多教程可以做到这一点。