使用OpenGL在OpenCV中绘制

Drawing in OpenCV with OpenGL

本文关键字:绘制 OpenCV OpenGL 使用      更新时间:2023-10-16

OpenCV库在使用GPU和OpenGL支持编译时,允许使用OpenGL显示图像。例如,video_reader.cpp(位于gpu示例中)使用OpenGL直接从cv::gpu::GpuMat渲染显示图形。

cv::gpu::GpuMat d_frame;
namedWindow("OpenGL", WINDOW_OPENGL);
cv::gpu::VideoReader_GPU d_reader(fname);
d_reader.dumpFormat(std::cout);
if (!d_reader.read(d_frame))
    break;
cv::imshow("GPU", d_frame);

这是一个非常有用的功能。但是,它没有记录在联机文档中。例如,对于namedWindow,文档中未列出标志WINDOW_OPENGL。在哪里可以找到OpenCV的OpenGL相关功能的文档?

2.4.5的文档不是很完整。我认为没有比你在上面看到的更多的文档了http://docs.opencv.org.

有较旧的文档,例如http://opencv.willowgarage.com/documentation/cpp/对于2.1,但我发现它没有您想要的标志的文档。

  • OpenCV/OOpenGL互操作文档https://docs.opencv.org/4.x/d2/d3c/group__core__opengl.html
  • Highgui/OpenGL文档https://docs.opencv.org/4.x/df/d24/group__highgui__opengl.html

特别是第二个链接为您提供了两个简单的渲染选项。

  • 带有Texture2D对象的imshow
  • setOpenGlDrawCallback()(https://docs.opencv.org/4.x/df/d24/group__highgui__opengl.html#gaf80dcbc168a6ce40f6d1ad9d79a10bb8)它允许您使用OpenGL在CCD_ 8的顶部绘制

函数

cv::imshow(const & string, cv::InputArray)

本机不支持gpu矩阵,但通过强制转换支持gpu矩阵。

即在其输入上支持CCD_ 9的任何东西也应该支持cv::gpu::GpuMat。我认为这意味着当你调用函数时,它会自动将矩阵下载到cv::Mat并从那里开始,即你的imshow函数调用不是直接绘制gpu->gpu,而是去gpu->cpu->gpu。