qt显示图片并转换成灰度图及伪彩图

 

 

 

 写了个程序,可在途图片,并切换成灰度图及伪彩图显示,主要代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);initRGBTable();//初始化颜色表
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_2_clicked()//
{double fMax=0.0;double fMin=0.0;findMaxMin(m_vData,fMax,fMin);double fDifference = fMax - fMin;QVector<quint8> vnData;vnData.resize(m_vData.size());if(fDifference != 0){for(int i = 0;i<m_nHeight;i++){for(int j = 0;j<m_nWidth;j++){vnData[i*m_nWidth+j] = static_cast<int>((m_vData.value(i*m_nWidth+j)-fMin)*1.0f/fDifference*255);}}}QImage img((uchar*)(&vnData[0]),m_nWidth,m_nHeight,QImage::Format_Indexed8);img.setColorTable(m_vecGrayTable);ShowImg(img);
}
void MainWindow::findMaxMin(QVector<double> vData, double &fMax, double &fMin)
{if(vData.size()>1){fMax = vData.value(0);fMin = fMax;for(int i=1;i<vData.size();i++){if(fMax<vData.value(i)){fMax = vData.value(i);}if(fMin>vData.value(i)){fMin = vData.value(i);}}}
}void MainWindow::ShowImg(QImage img)
{QPixmap qPix = QPixmap::fromImage(img);qPix.scaled(ui->label->size(), Qt::KeepAspectRatio);ui->label->setPixmap(qPix);
}
void MainWindow::initRGBTable()
{//核心代码,请下载源码查看
}void MainWindow::on_pushButton_clicked()
{double fMax=0.0;double fMin=0.0;findMaxMin(m_vData,fMax,fMin);double fDifference = fMax - fMin;QVector<quint8> vnData;vnData.resize(m_vData.size());if(fDifference != 0){for(int i = 0;i<m_nHeight;i++){for(int j = 0;j<m_nWidth;j++){vnData[i*m_nWidth+j] = static_cast<int>((m_vData.value(i*m_nWidth+j)-fMin)*1.0f/fDifference*255);}}}QImage img((uchar*)(&vnData[0]),m_nWidth,m_nHeight,QImage::Format_Indexed8);img.setColorTable(m_vecColorTable);ShowImg(img);
}void MainWindow::on_pushButton_3_clicked()//打开图片
{QFileDialog *fileDlg = new QFileDialog(this);fileDlg->setWindowTitle("Choose Pictures");QStringList qstrFilters;qstrFilters<<"Any files (*)";fileDlg->setNameFilters(qstrFilters);//设置文件过滤器fileDlg->setFileMode(QFileDialog::ExistingFiles);//设置能选择多个文件,如果是单个文件就写成QFileDialog::ExistingFileif(fileDlg->exec() == QDialog::Accepted){QStringList strPathList = fileDlg->selectedFiles();if(strPathList.count()>0){qImg.load(strPathList.first());m_nWidth = qImg.width();m_nHeight = qImg.height();ShowImg(qImg);qImg = qImg.convertToFormat(QImage::Format_Grayscale8,Qt::AutoColor);m_vData.resize(m_nWidth*m_nHeight);unsigned char *ImgDataPtr = qImg.bits();for(int i = 0;i<m_nHeight;i++){for(int j = 0;j<m_nWidth;j++){m_vData[i*m_nWidth+j]=*ImgDataPtr;ImgDataPtr++;}}}}fileDlg->close();delete fileDlg;fileDlg = nullptr;
}

源码下载地址:https://download.csdn.net/download/weixin_43935474/88232145

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/81170.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重注微电子产业,“三大齿轮”能否带起香港经济的“第三轮”

文 | 智能相对论 作者 | 佘凯文 众所周知&#xff0c;微电子产业早已成为现代科技领域的关键钥匙&#xff0c;谁能掌握微电子产业&#xff0c;谁就能拥有全球科技领域的话语权。 从上世纪开始&#xff0c;微电子产业曾经历过几次重大转移&#xff0c;如70年代从美国转向日本…

流媒体服务器SRS的搭建及QT下RTMP推流客户端的编写

一、前言 目前市面上有很多开源的流媒体服务器解决方案&#xff0c;常见的有SRS、EasyDarwin、ZLMediaKit和Monibuca。这几种的对比如下&#xff1a; &#xff08;本图来源&#xff1a;https://www.ngui.cc/zz/1781086.html?actiononClick&#xff09; 二、SRS的介绍 SRS&am…

LeetCode42.接雨水

这道题呢可以按列来累加&#xff0c;就是先算第1列的水的高度然后再加上第2列水的高度……一直加到最后就是能加的水的高度&#xff0c;我想到了这里然后就想第i列的水其实就是第i-1列和i1列中最小的高度减去第i列的高度&#xff0c;但是其实并不是&#xff0c;比如示例中的第5…

servlet介绍,tomcat容器下载启动

1.1servlet是什么&#xff1f; servlet是一种java程序类&#xff0c;这些类继承了httpservlet类。这些类没有main方法&#xff0c;有两大对象request请求&#xff0c; response响应对象。这些类需要servlet容器才可以运行。 servlet 2.5 servlet 3.0 WEB-INF/web.xml <…

【Rust】Rust学习 第十九章高级特征

现在我们已经学习了 Rust 编程语言中最常用的部分。在第二十章开始另一个新项目之前&#xff0c;让我们聊聊一些总有一天你会遇上的部分内容。你可以将本章作为不经意间遇到未知的内容时的参考。本章将要学习的功能在一些非常特定的场景下很有用处。虽然很少会碰到它们&#xf…

Android 12 源码分析 —— 应用层 一(SystemUI准备篇)

Android 12 源码分析 —— 应用层一&#xff08;SystemUI准备篇&#xff09; 在接下来的时间中&#xff0c;将会使用Pixel 3(blueline)作为研究对象&#xff0c;选用AOSP的android-12.0.0_r34分支作源代码。 先从android的应用层进行探析&#xff0c;然后慢慢深入android的fr…

【算法日志】贪心算法刷题:单调递增数列,贪心算法总结(day32)

代码随想录刷题60Day 目录 前言 单调递增数列 贪心算法总结 前言 今天是贪心算法刷题的最后一天&#xff0c;今天本来是打算刷两道题&#xff0c;其中的一道hard题做了好久都没有做出来(主要思路错了)。然后再总结一下。 单调递增数列 int monotoneIncreasingDigits(int n…

遥感影像的缨帽(K-T)变换Python实现

&#xff08;1&#xff09;介绍 缨帽变换&#xff08;Kirchhoff Transform&#xff0c;K-T变换&#xff09; 是一种在遥感图像处理中常用的技术&#xff0c;它可以有效地提取地物的空间特征和频谱信息。本文将对遥感缨帽变换的提出者、原理方法、公式、现在的发展、作用进行详…

CrystalNet .Net VCL for Delphi Crack

CrystalNet .Net VCL for Delphi Crack VCL或更为人所知的可视化组件库是基于一个面向对象的框架&#xff0c;什么是用户对开发人员和事件的Microsoft Windows应用程序的接口。可视化组件库是用对象Pascal编写的。它主要是为使用Borland而开发的&#xff0c;它具有与Delphi以及…

Qt双击某一文件通过自己实现的程序打开,并加载文件显示

双击启动 简述方法一方法二注意 简述 在Windows系统中&#xff0c;双击某类扩展名的文件&#xff0c;通过自己实现的程序打开文件&#xff0c;并正确加载及显示文件。有两种方式可以到达这个目的。 对于系统不知道的扩展名的文件&#xff0c;第一次打开时&#xff0c;需要自行…

如何理解α、β一类错误和二类错误?

原假设 H0&#xff1a;一般是想要推翻的结论&#xff0c;如指标没有变化&#xff0c;实验组和对照组的该结果指标没有差异等。 备择假设 H1&#xff1a;一般是想要证明的结论&#xff0c;如实验组的指标是显著提升的&#xff0c;指标提升10%等。 弃真错误/一类错误/显著性水平…

边缘计算节点BEC典型实践:如何快速上手PC-Farm服务器?

百度智能云边缘计算节点BEC&#xff08;Baidu Edge Computing&#xff09;基于运营商边缘节点和网络构建&#xff0c;一站式提供靠近终端用户的弹性计算资源。边缘计算节点在海外覆盖五大洲&#xff0c;在国内覆盖全国七大区、三大运营商。BEC通过就近计算和处理&#xff0c;大…