显示按事件发送到Qt GUI的Opencv映像

时间:2017-07-26 07:50:22

标签: multithreading qt opencv c++11

我正在努力寻找以下问题的正确解决方案(如下所述),现在我没有更多的想法。因此,我需要更有经验的开发人员的帮助:

我有一个独立于QT的类(我希望它保持这样),它在一个secundary线程中生成openCV图像。然后它会引发一个传递图像的事件。

    while (1)
        {
            if (timerActived & this->_camReady)
            {
                vector<Mat>* images = new vector<Mat>;
                images = this->AcquireImg();
                __raise this->frameAcquired(images);
            }
            this_thread::sleep_for(chrono::milliseconds(_frameTimeLaps));
        }

此事件被我的MainWindow挂钩,一个方法应该在我的GUI上显示我的图像。

    void MainWindow::displayFrame(vector<Mat>* frames) {
        vector<Mat>* frames2 = new vector<Mat>();
        frames2 = frames;
        for (int i = 0; i < frames2->size(); ++i) {
            this->camFrames->at(i)->showImage(frames2->at(i));
        }
    }

在runTime期间,当主线程访问图像时,我收到以下错误:

QCoreApplication :: sendEvent中的ASSERT失败:“无法将事件发送到不同线程拥有的对象。

我知道我没有正确使用线程,但我现在不知道如何创建异步事件。

谢谢你的帮助, 的Valentin

编辑1:

在我看来,真正的问题是:我可以使用普通的std :: thread和native事件与主Qthread进行通信吗?

1 个答案:

答案 0 :(得分:1)

毕竟,这是解决问题的解决方案。

这个想法是让主线程访问来自第二个线程的Mat。所以我修改了我的函数displayFrame,如下所示:

data () {
  return {
    email: '',
  }
},
methods: {
  submit () {
    alert(this.$data.email)
  }
}

新功能showImg正在执行旧的displayFrame。信号/插槽进程允许根据需要从GUI线程访问图像。

相关问题