qtopencv和qtopengl的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qtopencv和qtopengl的区别相关的知识,希望对你有一定的参考价值。

参考技术A QTOpenGL是第三方库,使用起来再也不用繁琐的用数组转换类型。
其他还有QTPYTHON,OPENCVVS+QT+OpenGL。QtopenCV库,QtOpenCV和QtOpenGL类似。
主要是为了方便在Qt中使用OpenCV。可以很容易的把OpenCV“融入”Qt内。

QtOpenGL - 共享 OpenGL 上下文

【中文标题】QtOpenGL - 共享 OpenGL 上下文【英文标题】:QtOpenGL - shared OpenGL context 【发布时间】:2018-12-07 13:45:26 【问题描述】:

我有一个Qt4 + OpenGL + Python 应用程序,它生成几何图形然后在QGLWidget 上绘制它。

class GLWidget(QtOpenGL.QGLWidget):

   def initializeGL(self):
       (...)
       self.scene.buildScene() #this generates geometry and creates OpenGL Lists

   def paintGL(self):
       (...)
       self.scene.renderScene() # this calls glCallList on every object

这很好用。问题是几何生成可能需要几秒钟甚至几分钟的时间,具体取决于输入。此时没有出现Qt窗口,因为应用卡在initializeGL()

我试图通过使用共享资源创建另一个具有附加 OpenGL 上下文的线程来避免这种“滞后”:

class GLWidget(QtOpenGL.QGLWidget):
   def __init__(self, parent):
      (...)
      self.buildingThread = threading.Thread(target=self.buildingThreadFunc)

   def buildingThreadFunc(self):
      self.buildFormat = QtOpenGL.QGLFormat()
      self.buildingContext = QtOpenGL.QGLContext(self.buildFormat)
      self.buildingContext.create(self.context()) #This returns False
      self.buildingContext.device() #This returns None
      self.buildingContext.initialized() #This returns False

      self.scene.buildScene() #And finnally this fails because 
                              #there is no context to call `glGenLists`

   def initializeGL(self):
      (...)
      self.buildingThread.start()

   def paintGL(self):
      (...)
      self.scene.renderScene() #Here, every element on scene shall successively appears during geometry creation

核心问题是QGLContext::create返回False,但不知道为什么。

此外:我对另一个线程和上下文的想法是否正确?它会起作用吗?我想glGenLists 和同时在QGLWidget 上绘画可能存在问题,但我希望至少其他小部件能够“响应”。

【问题讨论】:

【参考方案1】:

多年前I've read this blog post,解释了如何使用多个渲染线程。我在幕后展示了一个 GL 加载小部件,另一个 QGLWidget 正在启动。 根据博客文章,我制作了一个演示,展示了我的几十个加载小部件,所有这些小部件都是同时启动的。

也看看这个例子:

http://doc.qt.io/archives/qt-4.8/qt-demos-glhypnotizer-example.html

【讨论】:

以上是关于qtopencv和qtopengl的区别的主要内容,如果未能解决你的问题,请参考以下文章

QtOpenGL 和 MacOS X——软件渲染?

PyQt5安装导致designer、qtopengl、可能pyqtgraph错误

Qtopengl,为啥不能使用不同的vbo绘制两个立方体

QtOpengl 与 mac 上的 Opengl 框架冲突

导入 OpenCV python 模块时出错(使用 Qt 和 QtOpenGL 构建时)

QtOpenGL - 共享 OpenGL 上下文