图像处理软件开发记录(三) QT图像显示

专栏地址:http://blog.csdn.net/column/details/imagep.html

这一篇文章记录有关图像显示的问题。

因为对QT的研究不深,所以在QT上显示图像的设计过程真是坎坎坷坷。


在最开始,我用的显示方法最简单,就是用label来显示,就是下面这个:


ui->label->setPixmap(QPixmap::fromImage(img));


可是发现显示效果太差,为什么呢?
原因是图片的显示被束缚在我原始所画的label大小之下,当我想要显示比这个label更大的图片时,比如我输入一张完整的lena图像,无法显示完整。如下所示:


然后,我就得想办法解决这个问题。
很明显,把label的大小设置的大一点不是一个好的解决方案。
那么,我后来就想,把图片的大小压缩显示,这个思路清晰简单。

    ui->label->setPixmap(QPixmap::fromImage(img));
    ui->label->setScaledContents(true);
    ui->label->resize(ui->label->width(),ui->label->height());

可是还是遇到一个问题:图片变形了,如下所示


在以上问题出现后,我曾经这么想:选择一个合适的压缩比显示图片,就是说,我比较图片的大小和label的大小,然后根据它们之间的比例关系按图片的原始长宽比例缩减图片大小:

float cols_temp = image.cols;
    float wid_temp = ui->Imagedisplaylabel->width();
    float rows_temp = image.rows;
    float hei_temp = ui->Imagedisplaylabel->height();
    float ratio1 = cols_temp/wid_temp;
    float ratio2 = rows_temp/hei_temp;
    float ratio = 0.0;
    if (ratio1 > ratio2)
         ratio = ratio1;
    else
         ratio = ratio2;
    int width_re = ui->Imagedisplaylabel->width()/ratio;
    int height_re = ui->Imagedisplaylabel->height()/ratio;
    ui->Imagedisplaylabel->resize(width_re,height_re);

可是很不幸,无法达到好的效果。

最后,我在浏览博客 基础学习笔记之opencv(15):离散傅里叶变换的时候看到它的显示效果居然没有变形:


然后才发现,原来用Text Browser也可以显示图片。




Code如下:

void MainWindow::on_actionOpen_triggered()
{
    QString filename = QFileDialog::getOpenFileName(this,tr("Open Image"),".",tr("Image Files(*.png *.jpg *.jepg *.bmg)"));
    image = cv::imread(filename.toLatin1().data());
    cv::Mat temp;

    cv::cvtColor(image,temp,CV_BGR2RGB);
    //QImage img = QImage((const unsigned char*)(temp.data),temp.cols,temp.rows,QImage::Format_RGB888);
    QString path = QString("<img src=\"%1\"/>").arg(filename);
    ui->textBrowser->setFixedHeight(image.rows);
    ui->textBrowser->setFixedWidth(image.cols);
    ui->textBrowser->clear();
    ui->textBrowser->append(path);
}

显示效果如下:



另外,其实在最开始的时候我还没意识到使用布局方法,最后才发现布局方法的使用能够使窗口的结构布局适应窗口的变化。




References:

QTextEdit/QTextBrowser添加彩色文字与图片

基础学习笔记之opencv(15):离散傅里叶变换


更多图像处理、机器学习资源,请关注博客:LinJM-机器视觉  微博:林建民-机器视觉
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
图像处理是指通过使用计算机算法和技术来改变或改善图像的质量、外观或特征的过程。QT是一个跨平台的应用程序开发框架,可以用于开发图像处理软件。通过使用QT图像处理模块,可以在C++编程语言中实现图像处理算法。 在QT中,图像处理可以通过以下几个步骤来实现: 1. 加载图像:使用QT提供的函数,可以加载图像文件并将其存储为图像对象。 2. 图像处理算法:通过调用QT提供的图像处理函数,可以对加载的图像进行各种处理操作,比如调整图像的亮度、对比度、色彩饱和度等。 3. 显示图像:使用QT提供的图像显示控件,可以将处理后的图像显示在窗口中。 4. 保存图像:通过调用QT图像处理函数,可以将处理后的图像保存为文件。 在QT中,有很多图像处理相关的函数和类可以使用,比如QImage和QPixmap类可以用于加载和处理图像,QImageReader和QImageWriter类可以用于读取和写入图像文件,而QPainter类可以用于在窗口或其他绘图设备上绘制图像。 通过结合QT和C++,可以实现图像处理算法的高效和灵活性。QT提供了丰富的图像处理功能和易于使用的API,可以帮助开发者快速开发出高质量的图像处理软件。 总结起来,使用QT和C++可以实现图像处理,开发人员可以利用QT提供的图像处理模块和函数来加载、处理、显示和保存图像,从而实现各种图像处理操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值