QT进行数字图像处理-灰度直方图
最近在学习数字图像处理方面的知识,为了加深学习的效果,使用Qt进行处理处理程序的编写,Qt提供了QImage类,该类中有图
像处理的相关函数,简化了编程。由于能了有限,在此做记录,以便以后反思。首先进行了图像灰度直方图的编程,灰度直方图是一种
用来统计图像中像素灰度分布的工具。
void MainWindow::Imhist(QCustomPlot * plot, QImage *img)
{
double yrange = 0;
QVector<double> datax;
QVector<double> datay;
plot->clearGraphs();
datay.resize(256);
for(double i = 0; i < 256; i = i + 1)
datax.append(i);
QImage grayimg = img->copy();
unsigned char * data = grayimg.bits();
// 对直方图进行数据处理
int width = img->width();
int hight = img->height();
for(int i = 0; i <hight; i++)
{
for(int j = 0; j < width; j++)
{
datay.replace(data[i*hight + j],datay.at(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(0,256); //x轴范围
plot->yAxis->setRange(0,(int)yrange); //y轴范围
QCPBars *bars = new QCPBars(plot->xAxis, plot->yAxis);
bars->setData(datax, datay);
bars->setPen(QColor(0, 0, 0));
bars->setWidth(0.05);
plot->setVisible(true);
plot->replot();
}