QT控件快速显示连续图像

QT控件中显示图像方法有三种,使用QLabel,QWidget,QOpenGLWidget。

QLabel方式

QLabel的方式,基本上是,把opencv的图像转换成QImage,然后再转成QPixmap,绘制到控件上。

ui->label->setPixmap(*pixmap);

QWidget方式:

继承自QWidget类的子类里面,在paintEvent事件里面使用QPainter绘制

QPixmap buff(this->size());
QPainter p(&buff);
p.drawPixmap(0,0,QPixmap::fromImage(m_DisplayImage));
painter->drawPixmap(0,0,buff);

QOpenGLWidget方式:

和QWidget方式类似,只是继承自QOpenGLWidget就可以了。

优缺点比较:

QLabel的方法实现简单,但是绘制效率不高。
QWidget的方法,绘制效率稍微提高,但使用复杂,需要提升QWidget为自定义。
QOpenGLWidget的方法,使用显卡,绘制效率是最高的,使用复杂程度和QWidget类似。

模块封装:

对QOpenGLWidget的方法进行了封装,实现了一个QOpenGLImageWidget类,使用时直接将QOpenGLWidget提升为QOpenGLImageWidget即可调用显示图像接口,支持QImage和OpenCV的格式。下载位置为:https://download.csdn.net/download/iamqianrenzhan/23637972

绘制效率:

3kx2k的任意加载的图,最大帧率可到50fps
3kx2k的两张图交替显示,最大帧率可到200fps

使用方法:

准备好两种图像,设置到控件。

ui->widget->setOpenCVImage(m_PicA);
ui->widget->setOpenCVImage2(m_PicB);

然后交替切换模式,或者直接重新设置图像,两种情况最高支持帧率会有差别。

if(m_count++%2==0)
{
    ui->widget->setMode(0);
    //ui->widget->setOpenCVImage(m_PicA);
}
else
{
    ui->widget->setMode(1);
    //ui->widget->setOpenCVImage(m_PicB);
}

你可能感兴趣的:(qt,教程,qt,opencv)