首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简历:ogl::mapGLBuffer报告错误CL_INVALID_CONTEXT

简历:ogl::mapGLBuffer报告错误CL_INVALID_CONTEXT
EN

Stack Overflow用户
提问于 2022-06-27 11:49:14
回答 1查看 59关注 0票数 0

我想利用OpenCV对OpenGL/OpenCL的集成,在GPU上直接实现图像的快速失真,同时避免GPU/CPU图像传输。我可以从Qt中的一个cv::ogl::Buffer缓冲区对象创建一个OpenGL:

代码语言:javascript
复制
// m_pub is of type QOpenGLBuffer
cv::ogl::Buffer b(512, 512, CV_8UC4, m_pub.bufferId());

但是下一行会抛出一个异常:

代码语言:javascript
复制
cv::UMat m = cv::ogl::mapGLBuffer(b);

OpenCV报告的错误最初是:

D:\OpenCV\opencv-4.5.5\modules\core\src\opengl.cpp,OpenCV(4.5.5)错误:未知错误代码-220 (OpenCL: clCreateFromGLBuffer失败)在cv::ogl::mapGLBuffer中,文件

第1886行

为了获得更多信息,我在cv::ocl::getOpenCLErrorString(status);中调用opengl.cpp,重新构建,并发现错误是CL_INVALID_CONTEXT。

我检查了cv::ocl::Contextcv::ocl::Devicecv::ocl::Platformcv::ocl::attachContext补充说,一切都不起作用。我被困在这里,不知道怎么前进。任何建议都是非常感谢的。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-28 06:49:06

它需要在初始化阶段调用cv::ogl::ocl::initializeContextFromGL()。我的项目是基于Qt的,窗口是从QOpenGLWindow继承的,所以我在initializeGL()中调用了这个函数。

我猜如果没有这个调用,OpenCV也会自动创建OpenCL上下文,但这与从OpenGL创建的上下文不一样,这就是为什么会发生OpenCL错误。

作为提醒,我使用cv::remap来处理512x512图像,发现通过OpenCL在GPU上处理的速度并不比在CPU上快得多。它仍然平均花费大约12毫秒。如果应用程序需要较高的帧速率,并且需要为其他处理留出时间,这仍然太慢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72771594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档