直方圖計(jì)算

1 竖般、目的

使用OpenCV函數(shù) split 將圖像分割成單通道數(shù)組踪宠。
使用OpenCV函數(shù) calcHist 計(jì)算圖像陣列的直方圖
使用OpenCV函數(shù) normalize歸一化數(shù)組

2 纯出、直方圖概念

下面兩幅圖表達(dá)直方圖概念

1 .

image.png

2 .

下面直方圖概念是基于圖像像素值坐桩,其實(shí)對(duì)圖像梯度柏卤、每個(gè)像素的角度缸夹、等一切圖像的屬性值,我們都可以建立直方圖凑懂。這個(gè)才是直方圖的概念真正意義煤痕,不過(guò)是基于圖像像素灰度直方圖是最常見的。
直方圖最常見的幾個(gè)屬性:
dims 表示維度接谨,對(duì)灰度圖像來(lái)說(shuō)只有一個(gè)通道值dims=1
bins 表示在維度中子區(qū)域大小劃分摆碉,bins=256,劃分為256個(gè)級(jí)別

range 表示值得范圍脓豪,灰度值范圍為[0~255]之間
image.png

3 巷帝、API函數(shù)

CV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv);
split(// 把多通道圖像分為多個(gè)單通道圖像
const Mat &src, //輸入圖像
Mat* mvbegin)// 輸出的通道圖像數(shù)組


CV_EXPORTS 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 );
calcHist(
 const Mat* images,//輸入圖像指針
int images,// 圖像數(shù)目
const int* channels,// 通道數(shù)
InputArray mask,// 輸入mask,可選扫夜,不用
OutputArray hist,//輸出的直方圖數(shù)據(jù)
int dims,// 維數(shù)
const int* histsize,// 直方圖級(jí)數(shù)
const float* ranges,// 值域范圍
bool uniform,// true by default
bool accumulate// false by defaut
)

CV_EXPORTS_W void normalize( InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0,
                             int norm_type = NORM_L2, int dtype = -1, InputArray mask = noArray());
src               輸入數(shù)組楞泼;
dst               輸出數(shù)組,數(shù)組的大小和原數(shù)組一致历谍;
alpha           1,用來(lái)規(guī)范值现拒,2.規(guī)范范圍,并且是下限望侈;
beta             只用來(lái)規(guī)范范圍并且是上限印蔬;//為0時(shí)則為值歸一化,否則為范圍歸一化
norm_type   歸一化選擇的數(shù)學(xué)公式類型脱衙;
dtype           當(dāng)為負(fù)侥猬,輸出在大小深度通道數(shù)都等于輸入,當(dāng)為正捐韩,輸出只在深度與輸如不同退唠,不同的地方游dtype決定;
mark            掩碼荤胁。選擇感興趣區(qū)域瞧预,選定后只能對(duì)該區(qū)域進(jìn)行操作。

4 、整體代碼測(cè)試

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace std;
using namespace cv;

int main(int argc, char** argv) {
    Mat src = imread("D:\\pic/4.jpg");
    if (!src.data) {
        printf("could not load image...\n");
        return -1;
    }
    char INPUT_T[] = "input image";
    char OUTPUT_T[] = "histogram demo";
    namedWindow(INPUT_T, CV_WINDOW_AUTOSIZE);
    namedWindow(OUTPUT_T, CV_WINDOW_AUTOSIZE);
    imshow(INPUT_T, src);

    // 分通道顯示
    vector<Mat> bgr_planes;
    split(src, bgr_planes);
    //imshow("single channel demo", bgr_planes[0]);

    // 計(jì)算直方圖
    int histSize = 256;
    float range[] = { 0, 256 };
    const float* histRanges = { range };
    Mat b_hist, g_hist, r_hist;
    calcHist(&bgr_planes[0], 1, 0, Mat(), b_hist, 1, &histSize, &histRanges, true, false);
    calcHist(&bgr_planes[1], 1, 0, Mat(), g_hist, 1, &histSize, &histRanges, true, false);
    calcHist(&bgr_planes[2], 1, 0, Mat(), r_hist, 1, &histSize, &histRanges, true, false);

    // 歸一化
    int hist_h = 400;
    int hist_w = 512;
    int bin_w = hist_w / histSize;
    Mat histImage(hist_w, hist_h, CV_8UC3, Scalar(0, 0, 0));
    normalize(b_hist, b_hist, 0, hist_h, NORM_MINMAX, -1, Mat());
    normalize(g_hist, g_hist, 0, hist_h, NORM_MINMAX, -1, Mat());
    normalize(r_hist, r_hist, 0, hist_h, NORM_MINMAX, -1, Mat());

    // render histogram chart
    for (int i = 1; i < histSize; i++) {
        line(histImage, Point((i - 1) * bin_w, hist_h - cvRound(b_hist.at<float>(i - 1))),
            Point((i)*bin_w, hist_h - cvRound(b_hist.at<float>(i))), Scalar(255, 0, 0), 2, LINE_AA);

        line(histImage, Point((i - 1) * bin_w, hist_h - cvRound(g_hist.at<float>(i - 1))),
            Point((i)*bin_w, hist_h - cvRound(g_hist.at<float>(i))), Scalar(0, 255, 0), 2, LINE_AA);

        line(histImage, Point((i - 1) * bin_w, hist_h - cvRound(r_hist.at<float>(i - 1))),
            Point((i)*bin_w, hist_h - cvRound(r_hist.at<float>(i))), Scalar(0, 0, 255), 2, LINE_AA);
    }
    imshow(OUTPUT_T, histImage);

    waitKey(0);
    return 0;
}

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垢油,一起剝皮案震驚了整個(gè)濱河市盆驹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滩愁,老刑警劉巖躯喇,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異硝枉,居然都是意外死亡廉丽,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門妻味,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)正压,“玉大人,你說(shuō)我怎么就攤上這事弧可∶锵唬” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵棕诵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我凿将,道長(zhǎng)校套,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任牧抵,我火速辦了婚禮笛匙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犀变。我一直安慰自己妹孙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布获枝。 她就那樣靜靜地躺著蠢正,像睡著了一般。 火紅的嫁衣襯著肌膚如雪省店。 梳的紋絲不亂的頭發(fā)上嚣崭,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音懦傍,去河邊找鬼雹舀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛粗俱,可吹牛的內(nèi)容都是我干的说榆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼系吩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼腻格!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起灶似,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荠卷,失蹤者是張志新(化名)和其女友劉穎模庐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體油宜,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掂碱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慎冤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疼燥。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚁堤,靈堂內(nèi)的尸體忽然破棺而出醉者,到底是詐尸還是另有隱情,我是刑警寧澤披诗,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布撬即,位于F島的核電站,受9級(jí)特大地震影響呈队,放射性物質(zhì)發(fā)生泄漏剥槐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一宪摧、第九天 我趴在偏房一處隱蔽的房頂上張望粒竖。 院中可真熱鬧,春花似錦几于、人聲如沸蕊苗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)朽砰。三九已至,卻和暖如春膝蜈,著一層夾襖步出監(jiān)牢的瞬間锅移,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工饱搏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留非剃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓推沸,卻偏偏與公主長(zhǎng)得像备绽,于是被迫代替她去往敵國(guó)和親券坞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 概念:圖像直方圖是反映一個(gè)圖像像素分布的統(tǒng)計(jì)表肺素,其橫坐標(biāo)代表了圖像像素的種類恨锚,可以是灰度的,也可以是彩色的倍靡『锪妫縱坐標(biāo)...
    HoFie閱讀 1,582評(píng)論 0 0
  • 本章包括以下內(nèi)容: 計(jì)算圖像直方圖; 利用查找表修改圖像外觀塌西; 直方圖均衡化他挎; 反向投影直方圖檢測(cè)特定圖像內(nèi)容; ...
    sumpig閱讀 2,455評(píng)論 0 1
  • 計(jì)算直方圖calcHist 直方圖是對(duì)數(shù)據(jù)集合的統(tǒng)計(jì) 捡需,并將統(tǒng)計(jì)結(jié)果分布于一系列預(yù)定義的bins中办桨。這里的數(shù)據(jù)不僅...
    JasonDing閱讀 1,506評(píng)論 0 4
  • 前言 什么是直方圖? 直方圖是對(duì)數(shù)據(jù)的集合做統(tǒng)計(jì)站辉,并將統(tǒng)計(jì)結(jié)果分布于一系列預(yù)定義的bins中呢撞。 例如: 如果我按照...
    我的名字好長(zhǎng)好長(zhǎng)灬閱讀 9,607評(píng)論 0 3
  • 什么是直方圖呢?通過(guò)直方圖你可以對(duì)整幅圖像的灰度分布有一個(gè)整體的了解饰剥。直方圖的x 軸是灰度值(0 到255)殊霞,y ...
    HaveyYeung閱讀 4,954評(píng)論 0 1