//Mat转QImage
QImage Widget::OpenCVMatToQImage(cv::Mat mat)
{
// 8-bits unsigned, NO. OF CHANNELS = 1
if(mat.type() == CV_8UC1)
{
QImage tempImage;
//Mat转QImage
tempImage = QImage(
static_cast<unsigned char *>(mat.data),
mat.cols,
mat.rows,
static_cast<int>(mat.step),
QImage::Format_Grayscale8
);
return tempImage;
}
// 8-bits unsigned, NO. OF CHANNELS = 3
else if(mat.type() == CV_8UC3)
{
// Copy input Mat
const uchar *pSrc = (const uchar*)mat.data;
// Create QImage with same dimensions as input Mat
QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_RGB888);
return image.rgbSwapped();
}
else if(mat.type() == CV_8UC4)
{
// Copy input Mat
const uchar *pSrc = (const uchar*)mat.data;
// Create QImage with same dimensions as input Mat
QImage image(pSrc, mat.cols, mat.rows, mat.step, QImage::Format_ARGB32);
return image.copy();
}
else
{
return QImage();
}
}
//设置QLabel显示图片
void Widget::setCam1ImageShow(cv::Mat src)
{
QPixmap tempMap0 = QPixmap::fromImage(OpenCVMatToQImage(src));
tempMap0 = tempMap0.scaled(
ui->Cam1Label->size(),
Qt::KeepAspectRatio,
Qt::SmoothTransformation
);
ui->Cam1Label->setPixmap(tempMap0);
}
代码可以显示完整的图片,但会带来图片放大后无法缩小的问题,只需要在初始化阶段加上这一句就可以了
ui->Cam1Label->setSizePolicy(QSizePolicy::Ignored,QSizePolicy::Ignored);
默认
缩小