用OpenGL在OpenCV中绘图

yjghlzjz  于 2022-11-04  发布在  其他
关注(0)|答案(3)|浏览(199)

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

这是一个非常有用的特性。但是,它没有在documentation on-line中说明。例如,对于namedWindow,标记WINDOW_OPENGL没有在文档中列出。我在哪里可以找到OpenCV的OpenGL相关功能的文档?

iklwldmw

iklwldmw1#

2.4.5的文档不是很完整。我认为没有比http://docs.opencv.org更多的文档了。
有一些较旧的文档,比如2.1的http://opencv.willowgarage.com/documentation/cpp/,但是我没有发现它有您想要的标志的文档。

webghufk

webghufk2#

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

  • 带有Texture2D对象的imshow
  • setOpenGlDrawCallback()(),可让您使用OpenGL在nameWindow("OpenGL Window", WINDOW_OPENGL)上绘图。
vaqhlq81

vaqhlq813#

该函数

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

本身并不支援GPU矩阵,但透过转换支援GPU矩阵。
也就是说,任何在其输入上支持cv::Mat的东西也应该支持cv::gpu::GpuMat。我认为这意味着,当你调用该函数时,它会自动将矩阵下载到cv::Mat,并从那里开始,也就是说,你的imshow函数调用不是直接绘制gpu-〉gpu,而是绘制gpu-〉cpu-〉gpu。

相关问题