从cv :: Mat转换为QImage的快速方法

时间:2016-08-01 17:10:29

标签: c++ qt opencv

我想知道是否有一种从Mat转换为QImage的快速方法。我有以下转换类:

VideoReader::VideoReader() {
    cap = VideoCapture( CV_CAP_ANY );
}

QImage VideoReader::getFrame() {
    if (waitKey(30) >= 0)
        return;

    Mat frame;
    cap >> frame;

    QImage dest = QImage((uchar*)frame.data, frame.cols, frame.rows, frame.step, QImage::Format_RGB888);

    return dest;
}

此代码有效,但getFrame()方法大约需要20毫秒才能完成。我需要一些工作速度至少快两倍的东西。有什么方法可以优化这种/任何可以更快工作的替代转换方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

waitKey(30)将暂停代码约30毫秒。

该行在该函数中没有多大意义,因此您最好将其删除。以你的方式创建一个QImage不应该花费超过几微秒,因为没有复制图像等等......但是cap >> frame可能需要一些时间,这取决于你的捕获设备(但是你不能做太多反对这一点)。

如果您确实需要waitKey,则应使用waitKey(1)不要在那里浪费太多时间。