当前位置: 首页 > news >正文

QCustomplot实现灰度曲线图

从 QCustomplot官网 https://www.qcustomplot.com/index.php/download 下载支持文件。首页有些demo可以进行参考学习。

在这里插入图片描述

新建一个Qt工程,将下载得到的qcustomplot.h和qcustomplot.cpp文件加入到当前工程。pro文件中加上 printsupport

在这里插入图片描述

在ui界面中,添加一个Widget,将其提升为QCustomplot类型。

在这里插入图片描述

qt配置opencv,可见此篇文章 https://blog.csdn.net/bangtanhui/article/details/135583311


本次获取了一张图片的某一行的所有像素点灰度值,并以曲线的形式展现。

具体实现,见以下代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"#include <opencv2/imgcodecs.hpp>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core/hal/interface.h>
#include <opencv2/features2d/hal/interface.h>
#include <opencv2/imgproc/hal/interface.h>
#include "qcustomplot.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QString imgPath = "D:\\Qt\\File\\open_test\\background.PNG";
//    cv::Mat imgMat = cv::imread(imgPath.toLatin1().data(), cv::IMREAD_GRAYSCALE);
//    cv::cvtColor(imgMat, imgMat, cv::COLOR_BGR2RGB);
//    QImage img((const unsigned char*)(imgMat.data), imgMat.cols, imgMat.rows, QImage::Format_RGB888);ui->wid_curve->xAxis->setLabel(tr("Pixel"));ui->wid_curve->yAxis->setLabel(tr("GrayVal"));// 设置坐标轴的结束箭头ui->wid_curve->xAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);ui->wid_curve->xAxis->setUpperEnding(QCPLineEnding::esSpikeArrow);//设置背景色QLinearGradient plotGradient;plotGradient.setStart(0,0);//背景颜色起始点,从图左上角开始,y方向0~400之间为红色渐变,开始位置为红色plotGradient.setFinalStop(0,400);//y方向 >400 为绿色渐变,结束位置为绿色plotGradient.setColorAt(0,QColor(200,200,200));//黑色,透明度从 0 ~ 1,plotGradient.setColorAt(1,QColor(120,120,120));ui->wid_curve->setBackground(plotGradient);//添加图形ui->wid_curve->addGraph();ui->wid_curve->graph(0)->setPen(QPen(Qt::yellow)); // line color blue for first graphui->wid_curve->addGraph();//读取测试图片cv::Mat testMat;testMat = cv::imread(imgPath.toStdString(), CV_8UC1);if(testMat.empty()){return;}int rows = testMat.rows;int cols = testMat.cols;int maxGrayVal = 255;// 设置坐标轴的范围ui->wid_curve->xAxis->setRange(0,cols);  // 下边ui->wid_curve->xAxis2->setRange(0,cols); // 上边ui->wid_curve->yAxis->setRange(0,maxGrayVal);  // 左边ui->wid_curve->yAxis2->setRange(0,maxGrayVal); // 右边ui->wid_curve->xAxis2->setVisible(true);ui->wid_curve->xAxis2->setTickLabels(false);ui->wid_curve->yAxis2->setVisible(true);ui->wid_curve->yAxis2->setTickLabels(false);//获取200行的灰度值,更新x,y值QVector<double> x(cols),y(cols);for(int i=0; i<cols; i++){x[i] = i;//指定图片第200行的像素点int grayVal = (int)testMat.at<uchar>(200,i);y[i] = grayVal;}ui->wid_curve->graph(0)->setData(x,y);ui->wid_curve->graph(0)->rescaleAxes();ui->wid_curve->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom | QCP::iSelectPlottables);ui->wid_curve->replot();
}MainWindow::~MainWindow()
{delete ui;
}

效果如图:

在这里插入图片描述

相关文章:

  • 大型语言模型(LLM)的优势、劣势和风险
  • 计算机毕业设计 基于SpringBoot的线上教育培训办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Elasticsearch:将文档级安全性 (DLS) 添加到你的内部知识搜索
  • 【前端web入门第四天】02 CSS三大特性+背景图
  • 【安卓跨程序共享数据,探究ContentProvider】
  • Codeforces Round 888 (Div. 3)补题
  • Springboot 整合 Elasticsearch(二):使用HTTP请求来操作ES
  • 路桥施工污废水处理需要哪些工艺设备
  • 数据图表方案,企业视频生产数据可视化
  • Leetcode刷题笔记题解(C++):257. 二叉树的所有路径
  • 下载已编译的 OpenCV 包在 Visual Studio 下实现快速配置
  • VS编译器对scanf函数不安全报错的解决办法(详细步骤)
  • LeetCode、790. 多米诺和托米诺平铺【中等,二维DP,可转一维】
  • 安卓动态链接库文件体积优化探索实践
  • 大型装备制造企业案例分享——通过CRM系统管理全球业务
  • [nginx文档翻译系列] 控制nginx
  • 【comparator, comparable】小总结
  • Apache Pulsar 2.1 重磅发布
  • Consul Config 使用Git做版本控制的实现
  • co模块的前端实现
  • EventListener原理
  • HTTP中GET与POST的区别 99%的错误认识
  • Median of Two Sorted Arrays
  • Octave 入门
  • QQ浏览器x5内核的兼容性问题
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • supervisor 永不挂掉的进程 安装以及使用
  • Tornado学习笔记(1)
  • Vue2 SSR 的优化之旅
  • 大型网站性能监测、分析与优化常见问题QA
  • 多线程事务回滚
  • 构建二叉树进行数值数组的去重及优化
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 漂亮刷新控件-iOS
  • 前嗅ForeSpider中数据浏览界面介绍
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • linux 淘宝开源监控工具tsar
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​学习一下,什么是预包装食品?​
  • #if #elif #endif
  • #pragma 指令
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (12)Linux 常见的三种进程状态
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (多级缓存)多级缓存
  • (一)基于IDEA的JAVA基础10
  • *Django中的Ajax 纯js的书写样式1
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试