C++ 从cv::Mat到QImage的快速转换方法

C++ 从cv::Mat到QImage的快速转换方法,c++,qt,opencv,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 = QIm

我想知道是否有一种快速的方法可以将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毫秒才能完成。我需要一个至少快一倍的东西。是否有任何方法可以优化此/任何其他转换方法,从而更快地工作

谢谢

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

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


如果您确实需要
waitKey
您应该使用
waitKey(1)
以避免在那里浪费太多时间。

删除
If(waitKey(30)>=0)返回大约需要30毫秒谢谢,仍然需要15毫秒左右,一定是摄像头延迟。
waitKey(1)
在典型的windows系统上,afaik大约需要5-10毫秒。如果没有图像还没有准备好,相机通常会阻止捕捉调用,因此,如果您的相机具有30 fps的速度,仅调用
cap>>frame
大约需要33 ms(如果没有其他东西会占用两次调用之间的时间)。