Qt-在QLabel上显示Mat数据

admin2024-04-03  0

0. 写在前面

        用于记录一下,在Qt上显示Mat的数据,记录代码如下;

//QLabel中显示处理结果
void MainWindow::matToLabelShow(QLabel *label, Mat &mat)
{
    cv::Mat Rgb;
    QImage Img;
    if (mat.channels() == 3)//RGB Img
    {
        cv::cvtColor(mat, Rgb,COLOR_BGR2RGB);
        Img = QImage((const uchar*)(Rgb.data), Rgb.cols, Rgb.rows, Rgb.cols * Rgb.channels(), QImage::Format_RGB888);
    }
    else//Gray Img
    {
        Img = QImage((const uchar*)(mat.data), mat.cols, mat.rows, mat.cols * mat.channels(), QImage::Format_Indexed8);
    }

    //自适应显示
    int ori_width = Img.size().width();
    int ori_height = Img.size().height();

    int m_width = label->size().width();
    int m_height = label->size().height();

    int pro;
    if(ori_width/m_width >= ori_height / m_height)
    {
        pro = ori_width / m_width;
    }
    else
    {
        pro = ori_height / m_height;
    }

    int scale_width = ori_width / pro;
    int scale_height = ori_height / pro;

     QImage *scale_image = new QImage();
     *scale_image = Img.scaled(scale_width,scale_height,Qt::KeepAspectRatio);
     //label->setScaledContents(true);//充满整个屏幕
     label->setAlignment(Qt::AlignCenter);
     label->setPixmap(QPixmap::fromImage(*scale_image));
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!