利用QT画图像的直方图

1.什么是直方图

直方图是一种图形化展示数据频率分布的方式。它将样本数据分成一系列相邻的区间,统计每个区间内数据所占比例或数量,并用矩形条形图表现出来。直方图可以反映样本数据的分布情况,例如它们的集中趋势、对称性和离散程度等。

直方图在数据分析和处理过程中有广泛的应用,例如:

  1. 可以用于检查数据是否符合正态分布,从而判断使用什么类型的统计方法。

  2. 可以用于比较多组数据的分布情况,从而寻找它们的异同点。

  3. 可以用于数字图像处理中,对图像像素的亮度、对比度等特征进行定量描述。

  4. 可以用于形态学图像处理中,比如分割和重建等。

总的来说,直方图的作用是通过直观的图形展示方式,帮助分析者快速理解和评估数据的统计特征,从而更准确和全面地进行数据分析和处理。

2.qt编写灰度图像直方图

   // 统计灰度级别的像素数量 + 绘制直方图QVector<int> histogram(256, 0); // 存储每个灰度级别的像素数量for (int i = 0; i < image.width(); i++){for (int j = 0; j < image.height(); j++){QColor color(image.pixel(i, j));int gray = qGray(color.rgb()); // 获取灰度级别if((gray >= 30) &&( gray <= 225)){histogram[gray]++;}}}QImage histogramImage(256, 256, QImage::Format_RGB32); // 创建直方图图像histogramImage.fill(Qt::black); // 设置背景颜色QPainter painter(&histogramImage);painter.setPen(Qt::white);int maxCount = *std::max_element(histogram.begin(), histogram.end()); // 获取像素数量最大值for (int i = 0; i < 256; i++){int count = histogram[i];int x = i;int y = histogramImage.height() - (static_cast<double>(count) / maxCount) * histogramImage.height();painter.drawLine(x, histogramImage.height(), x, y);}QPixmap pixmap_hisinput;pixmap_hisinput = pixmap_hisinput.fromImage(histogramImage);ui->lb_histir->setPixmap(pixmap_hisinput.scaled(ui->lb_histir->size(), Qt::KeepAspectRatio, Qt::FastTransformation));

 

3.qt绘制rgb图像直方图

   QVector<int> redHistogram(256, 0); // 存储红色通道灰度级别的像素数量QVector<int> greenHistogram(256, 0); // 存储绿色通道灰度级别的像素数量QVector<int> blueHistogram(256, 0); // 存储蓝色通道灰度级别的像素数量for (int i = 0; i < image.width(); i++){for (int j = 0; j < image.height(); j++){QColor color(image.pixel(i, j));int red = color.red(); // 获取红色通道的灰度级别int green = color.green(); // 获取绿色通道的灰度级别int blue = color.blue(); // 获取蓝色通道的灰度级别//if ((red >= 30) && (red <= 225) && (green >= 30) && (green <= 225) && (blue >= 30) && (blue <= 225)){redHistogram[red]++;greenHistogram[green]++;blueHistogram[blue]++;}}}// 绘制红色通道直方图QImage redHistogramImage(256, 256, QImage::Format_RGB32); // 创建红色通道直方图图像redHistogramImage.fill(Qt::black); // 设置背景颜色QPainter redHistogramPainter(&redHistogramImage);redHistogramPainter.setPen(Qt::red);int maxRedCount = *std::max_element(redHistogram.begin(), redHistogram.end());for (int i = 0; i < 256; i++){int count = redHistogram[i];int x = i;int y = redHistogramImage.height() - (static_cast<double>(count) / maxRedCount) * redHistogramImage.height();redHistogramPainter.drawLine(x, redHistogramImage.height(), x, y);}// 绘制绿色通道直方图QImage greenHistogramImage(256, 256, QImage::Format_RGB32); // 创建绿色通道直方图图像greenHistogramImage.fill(Qt::black); // 设置背景颜色QPainter greenHistogramPainter(&greenHistogramImage);greenHistogramPainter.setPen(Qt::green);int maxGreenCount = *std::max_element(greenHistogram.begin(), greenHistogram.end());for (int i = 0; i < 256; i++){int count = greenHistogram[i];int x = i;int y = greenHistogramImage.height() - (static_cast<double>(count) / maxGreenCount) * greenHistogramImage.height();greenHistogramPainter.drawLine(x, greenHistogramImage.height(), x, y);}// 绘制蓝色通道直方图QImage blueHistogramImage(256, 256, QImage::Format_RGB32); // 创建蓝色通道直方图图像blueHistogramImage.fill(Qt::black); // 设置背景颜色QPainter blueHistogramPainter(&blueHistogramImage);blueHistogramPainter.setPen(Qt::blue);int maxBlueCount = *std::max_element(blueHistogram.begin(), blueHistogram.end());for (int i = 0; i < 256; i++){int count = blueHistogram[i];int x = i;int y = blueHistogramImage.height() - (static_cast<double>(count) / maxBlueCount) * blueHistogramImage.height();blueHistogramPainter.drawLine(x, blueHistogramImage.height(), x, y);}// 将直方图图像显示到三个控件中QPixmap redPixmap;redPixmap = redPixmap.fromImage(redHistogramImage);ui->lb_histrgb_red->setPixmap(redPixmap.scaled(ui->lb_histrgb_red->size(), Qt::KeepAspectRatio, Qt::FastTransformation));QPixmap greenPixmap;greenPixmap = greenPixmap.fromImage(greenHistogramImage);ui->lb_histrgb_green->setPixmap(greenPixmap.scaled(ui->lb_histrgb_green->size(), Qt::KeepAspectRatio, Qt::FastTransformation));QPixmap bluePixmap;bluePixmap = bluePixmap.fromImage(blueHistogramImage);ui->lb_histrgb_blue->setPixmap(bluePixmap.scaled(ui->lb_histrgb_blue->size(), Qt::KeepAspectRatio, Qt::FastTransformation));

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

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

相关文章

【JAVA学习笔记】66 - 本章作业(IO流)

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter19/src/com/yinhai/homework 1.使用File类和FileWriter类 (1)在判断e盘下是否有文件夹mytemp&#xff0c;如果没有就创建mytemp public class Homework01 {public static void main(String…

小程序 打开方式 页面效果 表单页面 点击跳到详情页 图标 获取后台数据 进行页面渲染

请求地址&#xff1a;geecg-uniapp 同源策略 数据请求 获取后台数据 ui库安装 冲突解决&#xff08;3&#xff09;-CSDN博客 一.uniapp转小程序 (1) 运行微信开发工具 &#xff08;2&#xff09; 配置id 然后运行 打开小程序 路径 E:\通\uniapp-jeecg\unpackage\dist\d…

yum工具的使用

yum工具的使用 rpm的弊端 前面我们讲了下rpm&#xff0c;那么rpm有什么弊端呢&#xff1f;其弊端是显而易见的&#xff0c;当用rpm安装软件时&#xff0c;若遇到有依赖关系的软件&#xff0c;必须先安装依赖的软件才能继续安装我们要安装的软件&#xff0c;当依赖关系很复杂的…

ci-cd的流程

1、项目在gitlab上&#xff0c;从gitlab上使用git插件获取源码&#xff0c;构建成war包&#xff0c;所以使用tomcat作为运行环境 发布 &#xff1a;使用maven插件发布&#xff0c;使用ssh连接。

Bun 1.0.7 版本发布,实现多个 Node.js 兼容改进

导读Bun 是一个集打包工具、转译器和包管理器于一体的 JavaScript 运行时&#xff0c;由 Jarred Sumner 发布了 1.0.7 版本。本次更新实现了对 Node.js 运行时的多项兼容性改进&#xff0c;并修复了近 60 个 bug。 根据发布说明&#xff0c;本版本对 “bun install” 命令进行…

尚硅谷大数据项目《在线教育之实时数仓》笔记007

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第9章 数仓开发之DWD层 P053 P054 P055 P056 P057 P058 P059 P060 P061 P062 P063 P064 P065 第9章 数仓开发之DWD层 P053 9.6 用户域用户注册事务事实表 9.6.1 主要任务 读…

关于 HTML 的一切:初学者指南

HTML 代表超文本标记语言&#xff0c;是用于创建网页和 Web 应用程序的标准语言。 本指南将全面介绍 HTML&#xff0c;涵盖从基本语法和语义到更高级功能的所有内容。 我的目标是用简单的术语解释 HTML&#xff0c;以便即使没有编码经验的人也能学习如何使用 HTML 构建网页。…

java泛型的深入 泛型还可以在很多地方进行定义 泛型类 泛型方法 泛型接口 泛型的继承和通配符 泛型类练习

文章目录 泛型的深入泛型还可以在很多地方进行定义泛型类泛型方法泛型接口 泛型的继承和通配符泛型类练习总结 泛型的深入 public static void main(String[] args) {//在没有泛型的时候怎么存储数据ArrayList listnew ArrayList();list.add(1);list.add("abc");//遍…

BAM(Bottleneck Attention Module)

BAM&#xff08;Bottleneck Attention Module&#xff09;是一种用于计算机视觉领域的深度学习模型结构&#xff0c;它旨在提高神经网络对图像的特征提取和感受野处理能力。BAM模块引入了通道注意力机制&#xff0c;能够自适应地加强或减弱不同通道的特征响应&#xff0c;从而提…

P5906 【模板】回滚莫队不删除莫队

这一题&#xff0c;虽说在洛谷标的是模板题&#xff0c;但可能没有“历史研究”那一题更加模板。 这一题相对于回滚莫队的模板题&#xff0c;可能在回滚的处理上稍微复杂了一点。对于回滚莫队就不多解释了&#xff0c;可以看一下 回滚莫队模板题 这一篇博客&#xff0c;稍微简单…

【数据结构】手撕单链表

目录 前言 1 链表 1.1 链表的概念及结构 1.2 链表的分类 1.2.1 单向或者双向 1.2.2 带头或者不带头 1.2.3 循环或者非循环 1.2.4 无头单向非循环链表 1.2.5 带头双向循环链表 2 链表的实现 2.1 结构 2.2 结点的创建 2.3 尾插 2.4 头插 2.5 尾删 2.6 头删 2.7 …

「随笔」浅谈2023年云计算的发展趋势

在2023年&#xff0c;云计算的发展趋势将受到政治、经济、社会和科技四个维度的影响。以下是对这些维度的具体分析&#xff1a; 1.1 政治维度&#xff1a; 全球政策推动&#xff1a; 随着全球各国政策对云计算的重视程度不断提高&#xff0c;云计算服务将获得更广泛的市场准入…