gpt4 book ai didi

c++ - OpenCV QT,显示视频帧(不使用While循环)

转载 作者:行者123 更新时间:2023-12-02 17:24:49 25 4
gpt4 key购买 nike

我有一个简单的个人项目,该项目使用QT和OpenCV框架在QLabel中显示视频。我知道如何进行到QImage的转换并设置Pixmap。

但是,视频在while循环下运行得太快了,无论我加载哪个视频,当我检查fps时,帧数都是29或30。
为了解决这个问题,我还实现了QTimer以在加载视频时启动。
我不确定如何使用它来显示需要设置的适当帧速率的帧。

任何想法,我怎么可以实现这一目标?

最佳答案

我之前在项目中已经完成了QImage转换。

static QImage Mat2QImage(const cv::Mat3b &src) {
QImage dest(src.cols, src.rows, QImage::Format_ARGB32);
for (int y = 0; y < src.rows; ++y) {
const cv::Vec3b *srcrow = src[y];
QRgb *destrow = (QRgb*)dest.scanLine(y);
for (int x = 0; x < src.cols; ++x) {
destrow[x] = qRgba(srcrow[x][2], srcrow[x][1], srcrow[x][0], 255);
}
}
return dest;
}

用法可能是这样的
void foo::timeout() // A slot which QTimer's timeout signal is connected to
{
// I didn't tested the code but it should work
Mat frame;
m_cap >> frame;
QImage img = Mat2QImage(frame);

QPixmap pixmap = QPixmap::fromImage(img);
ui->streamDisplay->setPixmap(pixmap);
}

据我记得,Mat图像应该是ARGB32。它已经以30 fps的速度流畅工作。

我听说性能最好的解决方案是使用QOpenglWidget,但我不知道如何实现相同的功能。也许你可以看看。

my older repo link

display-code-cpp

image-conversion-cpp

关于c++ - OpenCV QT,显示视频帧(不使用While循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60051635/

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