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

标签 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 毫秒才能完成。我需要至少工作速度两倍的东西。有什么方法可以优化这个/任何可以更快工作的替代转换方法吗?

谢谢!

最佳答案

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

这一行在那个函数中没有多大意义,所以你最好删除它。以您的方式创建 QImage 的时间不应超过几微秒,因为没有图像被复制等...但是 cap >> frame 可能需要一些时间,具体取决于您的捕获设备(但您对此无能为力)。

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

关于c++ - 从 cv::Mat 转换为 QImage 的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38704459/

相关文章:

c++ - 成员函数指针和回调

c++ - struct 中的 const char 指针声明

c++ - 未找到 CPP 中来自外部源的函数(Qt)

c++ - 将 cv::Mat 转换为 ipcMatrix<ipcRGB>

c++ - 从应用程序的音频接口(interface)创建音频缓冲区

c++ - QListview, QTreeview 是正确的以列表方式显示文件

c++ - QTextStream 和 Visual Studio 2008 Release模式

android - 如何在 Android Opencv C++ 中获取 abs 垫?

opencv - 食品包装上的错误检测 - 使用 Opencv

c++ - c++中==运算符的结合性