gpt4 book ai didi

qt - 优化 QPainter 绘图 & 将 QVideoFrame 直接转换为 QPixMap

转载 作者:行者123 更新时间:2023-12-04 18:34:28 47 4
gpt4 key购买 nike

关于我的问题的一些背景信息。我的目标是优化来自网络摄像头的图像的绘制,图像以 QVideoFrame 的形式出现,当前加载到 QImage 并从那里绘制。此解决方案工作正常,但在 X11 上绘制 QImage 非常慢。绘制一张图像大约需要 20 毫秒,这听起来并不多,但是当您为每一帧都执行此操作时,这会将相机馈送的帧速率减半。

我做了一些研究和测试,在 X11 中绘制 QPixMap 可以比绘制 QImage 快 10 倍左右。

这就是当前绘制过程的完成方式

if(mVFcurrentFrame.map(QAbstractVideoBuffer::ReadOnly))
{
QImage image(mVFcurrentFrame.bits(), mVFcurrentFrame.width(), mVFcurrentFrame.height(), mVFcurrentFrame.bytesPerLine(), imageFormat);
painter->drawImage(0,0,image); //Takes about 20ms
mVFcurrentFrame.unmap();
}

到目前为止我已经尝试过:
  • 将 QImage 转换为 QPixMap,这是可行的,但转换与绘制 Qimage
  • 一样慢
  • 使用 QPixMap::loadFromData() 将 QVideoFrame 直接加载到 QPixMap,无法使其工作。

  • 所以我的问题是,我可以将 QVideoFrame 直接转换为 QPixMap 并绘制它而不是使用 QImage 吗?你如何在不使用 QImage 的情况下进行 QVideoFrame 到 QPixmap 的转换?

    我曾尝试使用 QPixMap::loadFromData() 方法来加载视频帧,但到目前为止我无法使其工作。

    如果这不可能,我可以将 QImage 线程化到 QPixMap 转换或以其他方式优化绘图吗?

    最佳答案

    这也是我的问题。
    相机帧在 QLabel 中显示非常缓慢。
    我的代码在这里:

    QCamera *camera = new QCamera(this);
    camera->setCaptureMode(QCamera::CaptureViewfinder);
    QVideoProbe *videoProbe = new QVideoProbe(this);
    bool ret = videoProbe->setSource(camera);
    if (ret) {
    connect(videoProbe, SIGNAL(videoFrameProbed(const QVideoFrame &)),
    this, SLOT(present(const QVideoFrame &)));
    }
    camera->start();

    ...
    ...

    bool MainWindow::present(const QVideoFrame &frame)
    {

    QVideoFrame cloneFrame(frame);
    if(cloneFrame.map(QAbstractVideoBuffer::ReadOnly))
    {
    QImage img(
    cloneFrame.size(), QImage::Format_ARGB32);
    qt_convert_NV21_to_ARGB32(cloneFrame.bits(),
    (quint32 *)img.bits(),
    cloneFrame.width(),
    cloneFrame.height());

    label->setPixmap(QPixmap::fromImage(img));

    cloneFrame.unmap();
    }

    return true;
    }

    关于qt - 优化 QPainter 绘图 & 将 QVideoFrame 直接转换为 QPixMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23605074/

    47 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com