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);
}
|