步骤
- 导入图表库
- 在ui界面新建一个wight窗口并提升为那个图表库的类型
- 写函数 输入参数是(图表,待处理图片)
- 图表的横轴是像素值 从0-255 纵轴是此灰度的像素点数量或者占比
- 所以要挨个判断图像里的每一个像素点 确认灰度值之后计数
- 然后用画图表的指令就可以了
我下面为什么引用了 Qt:OpenCV::Mat与Qt::QImage相互转换 的知识呢。。。因为一开始我参考的例程导入的是qimage的图片。我觉得mat可能好用一点。。。。结果发现我不用转,直接把图片导入成mat格式来用就好了,我个憨憨。
void MainWindow::graydata(QCustomPlot * plot, Mat img)
{
double yrange=0;
QVector<double>datax;
QVector<double>datay;
plot->clearGraphs();
datay.resize(256);
for (double i=0;i<256;i++) {
datax.push_back(i);
}
unsigned char* data=img.data;
int width = img.rows-50;
int hight = img.cols-50;
for (int i=50;i<hight;i++) {
for (int j=50;j<width;j++) {
datay[data[i*hight+j]]+=1;
}
}
QVector<double>::iterator it;
for (it=datay.begin();it!=datay.end();it++) {
if(*it>yrange)
yrange=*it;
}
plot->xAxis->setRange(-5,260);
plot->yAxis->setRange(0,(int)yrange);
QCPBars *bars=new QCPBars(plot->xAxis,plot->yAxis);
bars->setData(datax,datay);
bars->setPen(QColor(0,0,0));
plot->replot();
}
QImage::Format这个方法可以查询图片的颜色类型
Qt:OpenCV::Mat与Qt::QImage相互转换假设存在一个 3\times3 的图像,如下图所示,数组x 统计的是像素点的灰度级,数组y
统计的是具有该灰度级的像素个数。其中,灰度为1的像素共3个,灰度为2的像素共1个,灰度为3的像素共2个,灰度为4的像素共1个,灰度为5的像素共2个。
数字图像处理(15): 灰度直方图(matplotlib 和OpenCV
绘制直方图)
QCustomPlot简单介绍和例程
qt超强精美绘图控件 – QCustomPlot一览 及 安装使用教程
下面两个链接 第一个说qimage格式有对齐,mat格式不用对齐
第二个说 mat格式基本上不用对齐,但是也有需要对齐的时候。。。
把QImage转换为cv::Mat
例如保存BMP格式的图像时,BMP要求图像数据按四字节对齐,此时就需要对Mat中的数据进行补零
对齐方法就是在每一行尾部补零,零的个数可能是1~3个
但其实大部分时候,Mat的内存都是连续的,只有极个别时候需要担心这个问题,这里有说明,和这里
【学习OpenCV】Mat::data指针Original: https://blog.csdn.net/qq_42635852/article/details/121232622
Author: 晓蓝WQuiet
Title: qt画个灰度直方图
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/645811/
转载文章受原作者版权保护。转载请注明原作者出处!