前面的代码省略,从opencv中videocapture中获取视频帧保存在frame中,mat2QImage()将Mat转为QImage
方法一:
QImage img = mat2QImage(frame);
//将图片完全适应label大小,不保持图片原有长宽比(label大小不变)
ui->label->setScaledContents(true);
ui->label->setPixmap(QPixmap::fromImage(img));
方法二:
//将图片按照KeepAspectRatio的方式,设置为label的大小(label大小不变)
QImage img = mat2QImage(frame).scaled(ui->label->size(),Qt::KeepAspectRatio);
KeepAspectRatio:
以上两种方法都是图片适应label大小,但仍没有实现label适应窗口大小,调整窗口大小时label大小不变,从而图像大小也不变。
最终采用的方法:
//图像适应label大小
QImage img = mat2QImage(frame).scaled(ui->label->size(),Qt::KeepAspectRatio);
ui->label->setPixmap(QPixmap::fromImage(img));
//label适应窗口大小
int width1 = ui->centralwidget->width() - 200;
int height1 = ui->centralwidget->height() - 20;
ui->label->resize(width1,height1);
centralwidget是整个窗口,可以自己调整label随整个窗口大小的变化程度,再调整好label位置,就可以实现
1、图像适应label大小;
并且
2、label适应窗口大小。