opencv學習筆記C++繪制灰度直方圖
直方圖的計算很簡單,無非就是遍歷圖像的像素,統(tǒng)計每個灰度級的個數(shù),opencv中calcHist函數(shù)能夠同時計算過個圖像,多個通道,不同灰度范圍的灰度直方圖。
void calcHist(const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform = true, bool accumulate = false);
參數(shù)釋義
images 輸入的圖像
nimages 輸入的圖像個數(shù)
channels 統(tǒng)計直方圖第幾通道
mask 可選的操作掩碼
hist 輸出的直方圖數(shù)組
dims 需要統(tǒng)計直方圖通道的個數(shù)
histSize 直方圖分成多少個區(qū)間
ranges 像素值區(qū)間
uniform 是否進行歸一化處理
accumulate 在多個圖像時是否計算像素值個數(shù)
接下來直接看代碼:
Mat img;
img = imread("貓1.jpg",0);
int channels[] = { 0 };
int bins = 256;
Mat hist;
int hist_size[] = { bins };
float range[] = { 0,256 };
const float*ranges[] = { range };
calcHist(&img, 1, 0, Mat(), hist, 1, hist_size, ranges);
double max_val;
minMaxLoc(hist, 0, &max_val);//定義矩陣中最小值,最大值的位置
int scale = 2;
int hist_height =256;
Mat hist_ing = Mat::zeros(hist_height, scale*bins, CV_8UC3);
for (int i = 0; i < bins; i++)
{
float bin_val = hist.at<float>(i);//圖像的灰度頻率表
int inten = cvRound(bin_val*hist_height / max_val);//繪制高度
rectangle(hist_ing, Point(scale*i, hist_height - 1), Point((i + 1)*scale - 1, hist_height - inten), CV_RGB(255, 255, 255));
}
imshow("直方圖", hist_ing);
waitKey(0);
效果如下:

以上就是opencv學習筆記C++繪制灰度直方圖的詳細內(nèi)容,更多關(guān)于C++ opencv灰度直方圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++運行時獲取類型信息的type_info類與bad_typeid異常
這篇文章主要介紹了C++運行時獲取類型信息的type_info類與bad_typeid異常,是C++入門學習中的基礎(chǔ)知識,需要的朋友可以參考下2016-01-01
C語言數(shù)據(jù)結(jié)構(gòu)與算法之排序總結(jié)(二)
這篇文章住要介紹的是選擇類排序中的簡單、樹形和堆排序,歸并排序、分配類排序的基數(shù)排序,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2021-12-12

