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

news2024/11/14 15:19:37

 

 

 

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

#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::ExistingFile
    if(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.coloradmin.cn/o/902185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java日常的String、Date、计算问题

一、String相关类 三者执行速度&#xff1a;StringBuilder > StringBuffer > String 1.1、String 每次对 String 类型改变的时&#xff0c;都会生成一个新的 String 对象&#xff0c;指针指向新的 String 对象。 适用于字符串不常变的&#xff0c;少量的数据场景中&am…

每日一题 143重排链表

题目 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交…

【Linux】-进程概念之进程地址空间的万字详解(解决一个变量怎么保存不同数据的问题)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

Java程序设计——编写计算器

设计主类 Calculator import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Objects;import javax.swing.*;//Calculator类&#xff0c;继承JFrame框架&#xff0c;实现事件监听器接口 public class Calculator e…

如何快速制作一个房地产电子传单?

在如今高度数字化的时代&#xff0c;电子传单成为了宣传推广的一种重要方式。下面将介绍如何利用乔拓云平台快速制作一个房地产电子传单。 第一步&#xff0c;找一个可靠的第三方制作平台/工具&#xff0c;比如乔拓云平台。乔拓云平台是一个功能强大、简单易用的电子传单制作工…

SpringBoot+微信小程序奶茶在线点单小程序系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址&#xff1a; 视频地址 二、项目介绍 项目描述&#xff1a;这是一个基于SpringBoot微信小程序框架开发的奶茶在线点单小程序系统。首先&#xff0c;这是一个前后端分离的项目&#xff…

2023年,IT人都在追寻什么样的科技和技术?

摘要&#xff1a; 随着科技的不断发展&#xff0c;IT领域也在以惊人的速度发展。每年都会有新的技术和趋势出现&#xff0c;成为IT人士关注和追逐的对象。那么&#xff0c;在2023年&#xff0c;IT人都在追寻什么样的科技和技术呢&#xff1f;本文将探索2023年IT 人士最热衷的科…

SpringBoot---内置Tomcat 配置和切换

&#x1f600;前言 本篇博文是关于内置Tomcat 配置和切换&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x…

4 STM32标准库函数 之 FLASH存储器(FLASH)所有函数的介绍及使用

3 STM32标准库函数 之 FLASH存储器所有函数的介绍及使用 1. 图片有格式2 文字无格式二、FLASH 库函数固件库函数预览2.1 函数FLASH_SetLatency2.2 函数FLASH_HalfCycleAccessCmd2.3 函数FLASH_PrefetchBufferCmd2.4 函数FLASH_Unlock2.5 函数FLASH_Lock2.6 函数FLASH_ErasePage…

LeetCode 2236. 判断根结点是否等于子结点之和

【LetMeFly】2236.判断根结点是否等于子结点之和 力扣题目链接&#xff1a;https://leetcode.cn/problems/root-equals-sum-of-children/ 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左子结点和右子结点。 如果根结点值等于…

【数据分析入门】Matplotlib

目录 零、图形解析与工作流0.1 图形解析0.2 工作流 一、准备数据1.1 一维数据1.2 二维数据或图片 二、绘制图形2.1 画布2.2 坐标轴 三、绘图例程3.1 一维数据3.2 向量场3.3 数据分布3.4 二维数据或图片 四、自定义图形4.1 颜色、色条与色彩表4.2 标记4.3 线型4.4 文本与标注4.5…

Zoho CRM有哪些特点?

企业想要选择一款CRM系统&#xff0c;只看CRM公司排名或CRM厂商排名可以吗&#xff1f;其实&#xff0c;选型时的误区就是盲目选择大品牌&#xff0c;反而忽略了CRM和业务的适配度&#xff0c;毕竟适合的才是最好的。。 Zoho CRM是一款国际知名的SaaS云端CRM系统&#xff0c;面…

阿里云访问端口被限制解决方法记录

阿里云服务器&#xff0c;80端口可以访问&#xff0c;但是加入了安全组端口8080 通过公网访问改端口策略&#xff0c;发现不能被访问 问题出在防火墙&#xff0c;需要重置一下 解决方法&#xff1a; 在运行的服务器上执行如下命令&#xff1a; # iptables -A INPUT -j ACCEP…

23年9月到24年3月苹果产品发布

2023年到2024年的苹果产品发布 9月 基本就是手机&#xff0c;4款&#xff1a;15、15plus、15pro、15pro max 手表和ipodmini 10月就是新的M3芯片&#xff0c;至于M pro芯片会放在24年的3月份。 其他的就没什么新意了

课程项目设计--项目设计--宿舍管理系统--vue+springboot完成项目--项目从零开始

写在前面&#xff1a; 本文是从项目设计到完成开始写的&#xff0c;本来这个项目基础功能是做完了的&#xff0c;但是之前时间紧张想从头做起了。之前一周写前端后端累死了. 设计是关键&#xff0c;这一篇主讲设计。可能后面会有修改&#xff0c;本人实力有限&#xff0c;如有…

【微信小程序】下拉刷新功能实现

微信小程序开发系列 文章目录 前言一、onPullDownRefresh函数二、实现1.开启下拉刷新2.监听下拉事件 前言 在开发微信小程序中经常会需要下拉页面进行更新要页面数据的功能&#xff0c;微信小程序提供了onPullDownRefresh函数。该函数作用是监听用户下拉动作。 一、onPullDown…

【多线程】 —— 线程池

文章目录 1、什么是线程池&#xff0c;线程池有哪些&#xff08;创建&#xff09;(1) newCachedThreadPool(2) newFixedThreadPool(3) newSingleThreadExecutor(4) newScheduleThreadPool 2、为什么要使用线程池&#xff1f;3、线程池底层工作原理4、ThreadPoolExecutor 对象有…

【剖析STL】vector

vector的介绍及使用 1.1 vector的介绍 cplusplus.com/reference/vector/vector/ vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是…

激活函数总结(十四):激活函数补充(Gaussian 、GCU、ASU)

激活函数总结&#xff08;十四&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Gaussian 激活函数2.2 Growing Cosine Unit (GCU)激活函数2.3 Amplifying Sine Unit (ASU)激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、R…