qt画个灰度直方图
步驟
我下面為什么引用了 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);//向量擴容到256并填充為0 用來計數for (double i=0;i<256;i++) {datax.push_back(i);//x向量填0 1 ……255 作為橫坐標}//QImage countimg=img->copy();unsigned char* data=img.data;//bits()直接返回圖像第一個字節的地址int width = img.rows-50;int hight = img.cols-50;//圖像邊緣隨手隔了50個像素不讀for (int i=50;i<hight;i++) {for (int j=50;j<width;j++) {datay[data[i*hight+j]]+=1;}}//y軸最大值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指針
總結
- 上一篇: 基于SSM的家庭财务管理系统
- 下一篇: 【Python 每日一技】文本查找和替换