利用GDAL和QWT绘制图像直方图2--QWT绘制直方图
2014-02-28 17:29
239 查看
转自:http://blog.csdn.net/kupepoem/article/details/20144697
系统环境:win7
开发环境:vs2010,qt4.7,qwt6.01,GDAL1.9
参考:..\qwt-6.0.1\examples\tvplot工程
参考:http://blog.csdn.net/e5max/article/details/8854682
利用GDAL和QWT绘制图像直方图1--Gdal统计直方图篇我们已经得到了图像的直方图,下面我们利用QWT工具来进行直方图的绘制(QWT的编译和使用请查看我的博客使用qwt作曲线图)。下面我们看看怎么利用QWT绘制GDAL统计出来的直方图。
一、QWT框架简介
Qwt框架提供了几种标准的图元实现。如网格(QwtPlotGrid类)、标签(QwtPlotMarker类)、标尺(QwtPlotScaleItem类)、显示SVG格式图形文件的图元(QwtPlotSvgItem类)、频谱图(QwtPlotSpectrogram类)、曲线(QwtPlotCurve类)、柱状图(QwtPlotHistogram类)、间隔区域(QwtPlotIntervalCurve类)、三维散点图(QwtPlotSpectroCurve类)等。用户可以继承QwtPlotItem实现符合自己需要的图元。具体请参考http://blog.csdn.net/e5max/article/details/8854682。
二、直方图绘制类实现
QWT继承QT的特点,数据和界面进行分离,具体的我还没深入研究。在此次直方图绘制中Histogram类为数据类,CHisPlot为界面绘制类。我们也不说闲话了,先看直方图绘制类的头文件吧。
好了我们看实现吧
三、直方图的类使用
实现的类写完了,我们看看怎么用CHisPlot类吧。不多说了,先放代码
四、实现界面效果
系统环境:win7
开发环境:vs2010,qt4.7,qwt6.01,GDAL1.9
参考:..\qwt-6.0.1\examples\tvplot工程
参考:http://blog.csdn.net/e5max/article/details/8854682
利用GDAL和QWT绘制图像直方图1--Gdal统计直方图篇我们已经得到了图像的直方图,下面我们利用QWT工具来进行直方图的绘制(QWT的编译和使用请查看我的博客使用qwt作曲线图)。下面我们看看怎么利用QWT绘制GDAL统计出来的直方图。
一、QWT框架简介
Qwt框架提供了几种标准的图元实现。如网格(QwtPlotGrid类)、标签(QwtPlotMarker类)、标尺(QwtPlotScaleItem类)、显示SVG格式图形文件的图元(QwtPlotSvgItem类)、频谱图(QwtPlotSpectrogram类)、曲线(QwtPlotCurve类)、柱状图(QwtPlotHistogram类)、间隔区域(QwtPlotIntervalCurve类)、三维散点图(QwtPlotSpectroCurve类)等。用户可以继承QwtPlotItem实现符合自己需要的图元。具体请参考http://blog.csdn.net/e5max/article/details/8854682。
二、直方图绘制类实现
QWT继承QT的特点,数据和界面进行分离,具体的我还没深入研究。在此次直方图绘制中Histogram类为数据类,CHisPlot为界面绘制类。我们也不说闲话了,先看直方图绘制类的头文件吧。
//Hisgram为直方图的数据类 class Histogram: public QwtPlotHistogram { public: Histogram(const QString &, const QColor &); //设置直方图绘制的颜色和符号 void setColor(const QColor &); //设置直方图的数据 //numValues为统计的间隔数,这在篇1中有介绍 //dfmin为统计图像波段的最小值 //dfmax为统计图像波段的最大值 //pArray为直方图数组,大小为numValues void setValues(double dfmin,double dfmax,uint numValues, const double *pArray); }; //实际界面绘制类 class CHisPlot: public QwtPlot { Q_OBJECT public: CHisPlot(QWidget * = NULL); //设置直方图数据 void setHis(double dfmin,double dfmax,const QVector<double> & vecHis ,const QString &strHisName); private: Histogram *m_hisGram; };
好了我们看实现吧
//直方图数据类实现 Histogram::Histogram(const QString &title, const QColor &symbolColor): QwtPlotHistogram(title) { //设置柱状直方图 setStyle(QwtPlotHistogram::Columns); //设置颜色 setColor(symbolColor); } void Histogram::setColor(const QColor &symbolColor) { QColor color = symbolColor; color.setAlpha(180); setPen(QPen(Qt::black)); setBrush(QBrush(color)); QwtColumnSymbol *symbol = new QwtColumnSymbol(QwtColumnSymbol::Box); symbol->setFrameStyle(QwtColumnSymbol::Raised); symbol->setLineWidth(2); symbol->setPalette(QPalette(color)); setSymbol(symbol); } //设置数据 void Histogram::setValues(double dfmin,double dfmax,uint numValues, const double *values) { QVector<QwtIntervalSample> samples(numValues); double dscale=(dfmax-dfmin)/numValues; for ( uint i = 0; i < numValues; i++ ) { QwtInterval interval(dfmin+i*dscale, (i+1)*dscale+dfmin);//设置统计间隔,这个感觉是QWT的设计的过人之处 interval.setBorderFlags(QwtInterval::ExcludeMaximum); samples[i] = QwtIntervalSample(values[i], interval); } setData(new QwtIntervalSeriesData(samples)); } CHisPlot::CHisPlot(QWidget *parent): QwtPlot(parent) { //设置背景 setCanvasBackground(QColor(Qt::gray)); plotLayout()->setAlignCanvasToScales(true); //设置坐标标题 setAxisTitle(QwtPlot::yLeft, tr("Frequency")); setAxisTitle(QwtPlot::xBottom, tr("Band")); } //设置直方图数据 void CHisPlot::setHis(double dfmin,double dfmax,const QVector<double> & vecHis ,const QString & strHisName) { m_hisGram = new Histogram(strHisName, Qt::red); int ncount=vecHis.count(); m_hisGram->setValues( dfmin, dfmax,ncount, &vecHis[0]); m_hisGram->attach(this); replot(); etAutoReplot(true); }
三、直方图的类使用
实现的类写完了,我们看看怎么用CHisPlot类吧。不多说了,先放代码
CHisPlot*pHisPlot=new CHisPlot(); pHisPlot->setHis(pMinMax[0],pMinMax[1],vecHis,"his1"); pHisPlot->show();
四、实现界面效果
相关文章推荐
- 利用GDAL和QWT绘制图像直方图1--Gdal统计直方图
- 利用GDAL和QWT绘制图像直方图2--QWT绘制直方图
- opencv图像直方图的计算及绘制
- C#利用GDAL打开图像并拉伸像素值生成jpg快视图
- 利用GDAL从内存中直接解析图像数据
- 利用Android的Canvas绘制正弦函数图像
- 利用Python-caffe进行图像分类,卷积核的显示,激活值特征图的显示以及全连接层直方图显示
- 关于VC绘制图像的直方图
- 怎样将html5中利用canvas绘制的图像在服务端保存为图片?
- 利用OpenCV实现图像边缘直方图输出
- OpenCV入门(二十一)-- 绘制彩色图像的直方图
- (二)利用processing绘制自定义图像
- OpenCV绘制图像的水平和竖直方向直方图
- 利用DevExpress的WebChartControl绘制直方图,折线图和饼状图
- opencv 图像直方图绘制
- 练习:利用颜色直方图匹配算法实现图像中目标的识别
- Opencv学习笔记——绘制图像的像素直方图
- 计算并绘制单通道图像的直方图
- 利用opencv函数对图像旋转后,按旋转偏移新计算新的图像外接四边形绘制
- HTML5利用Canvas绘制图形(使用图像、裁剪区域、使用文本。阴影效果和操作像素)