统计RGB彩图或灰度图各通道像素点数的折线图
histogramWidget.h头文件
#pragma once
#include <qwidget.h>
#include <qgridlayout.h>
#include <QtCharts/qchartview.h>
#include <QtCharts/qlineseries.h>
#include <QGraphicsSimpleTextItem>
QT_CHARTS_USE_NAMESPACE //QtChart名空间
//QChartView用与显示QChart图表
class ChartView : public QChartView
{
public:
explicit ChartView(QChart *chart, int num, int RCount1[256] = {
0 }, int GCount1[256] = {
0 }, int BCount1[256] = {
0 }, QWidget *parent = nullptr);
~ChartView();
// 保存坐标区域,用于复位
void saveAxisRange();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent *event);
private:
int RCount[256];
int GCount[256];
int BCount[256];
int channelNum;
QPoint m_lastPoint;
bool m_isPress = false;
bool m_alreadySaveRange = false;
double m_xMin, m_xMax, m_yMin, m_yMax;
QGraphicsSimpleTextItem *m_coordItem;
};
class pixelsHistogram : public QWidget
{
public:
pixelsHistogram(int Count[256]);
pixelsHistogram(int RCount[256], int GCount[256], int BCount[256]);
~pixelsHistogram();
protected:
void createChart(int Count[256]);
void createChart(int RCount[256], int GCount[256], int BCount[256]);
private:
QList<QLineSeries *> m_series;
QChart *chart;
ChartView *chartView;
};
//void showRGBHistogram(int RCount[256], int GCount[256], int BCount[256])
//{
// QWidget *histogramWidget = new QWidget();
//
// QList<QLineSeries *> m_series;
// QLineSeries *Rseries = new QLineSeries();
// QLineSeries *Gseries = new QLineSeries();
// QLineSeries *Bseries = new QLineSeries();
// m_series.append(Rseries);
// m_series.append(Gseries);
// m_series.append(Bseries);
//
// Rseries->setName("CH3");
// Gseries->setName("CH2");
// Bseries->setName("CH1");
//
// Rseries->setColor(QColor(255, 0, 0));
// Gseries->setColor(QColor(0, 255, 0));
// Bseries->setColor(QColor(0, 0, 255));
//
// //设置线条可视
// Rseries->setVisible(true);
// Gseries->setVisible(true);
// Bseries->setVisible(true);
//
// //添加坐标点
// for (int i = 0; i < 256; i++)
// {
// Rseries->append(i, RCount[i]);
// Gseries->append(i, GCount[i]);
// Bseries->append(i, BCount[i]);
// }
//
// QChart *chart = new QChart();
// chart->setTheme(QChart::ChartThemeBlueCerulean);//设置系统主题
// //chart->setBackgroundBrush(QBrush(QColor(170,170,255)));//设置背景色,主题和背景二选一
// //chart->setDropShadowEnabled(true);//是否背景阴影
// chart->setLocalizeNumbers(true);//数字是否本地化
// //chart->legend()->show();//legend是否显示,show和hide
// chart->addSeries(Rseries);
// chart->addSeries(Gseries);
// chart->addSeries(Bseries);
// chart->createDefaultAxes();//创建默认轴
// chart->setTitle("Histogram");//设置标题
// chart->setTitleBrush(QBrush(QColor(255, 170, 255)));//设置标题Brush
// chart->setTitleFont(QFont("微软雅黑"));//设置标题字体
//
// //chart->legend()->setVisible(true);
// //chart->legend()->setAlignment(Qt::AlignBottom);//底部对齐
// //chart->legend()->setBackgroundVisible(true);//设置背景是否可视
// //chart->legend()->setLabelColor(QColor(255, 128, 255));//设置标签颜色
// //chart->legend()->setVisible(true);//设置是否可视
// //chart->legend()->setBorderColor(QColor(255, 255, 170, 185));//设置边框颜色
//
// QChartView *chartView = new QChartView(chart);
// chartView->setRenderHint(QPainter::Antialiasing);
//
// QGridLayout *mainLayout = new QGridLayout;
// mainLayout->addWidget(chartView);
// histogramWidget->setLayout(mainLayout);
// histogramWidget->resize(960, 720);
// histogramWidget->setWindowTitle("Histogram");
// histogramWidget->setWindowModality(Qt::WindowModal);
// histogramWidget->show();
//}
//
//void showGrayScaleHistogram(int Count[256])
//{
// QWidget *histogramWidget = new QWidget();
//
// QList<QLineSeries *> m_series;
// QLineSeries *series = new QLineSeries();
// m_series.append(series);
//
// series->setName("CH1");
//
// series->setColor(QColor(0, 0, 0));
//
// //设置线条可视
// series->setVisible(true);
//
// //添加坐标点
// for (int i = 0; i < 256; i++)
// {
// series->append(i, Count[i]);
// }
//
// QChart *chart = new QChart();
// chart->setTheme(QChart::ChartThemeBlueCerulean);//设置系统主题
// //chart->setBackgroundBrush(QBrush(QColor(170,170,255)));//设置背景色,主题和背景二选一
// //chart->setDropShadowEnabled(true);//是否背景阴影
// chart->setLocalizeNumbers(true);//数字是否本地化
// //chart->legend()->show();//legend是否显示,show和hide
// chart->addSeries(series);
// chart->createDefaultAxes();//创建默认轴
// chart->setTitle("Histogram");//设置标题
// //chart->setTitleBrush(QBrush(QColor(255, 170, 255)));//设置标题Brush
// chart->setTitleFont(QFont("微软雅黑"));//设置标题字体
//
// //chart->legend()->setVisible(true);
// //chart->legend()->setAlignment(Qt::AlignBottom);//底部对齐
// //chart->legend()->setBackg