天天看點

OpenCV學習(26) 直方圖(3)

      本章中我們學習一下通過backproject直方圖,得到一副圖像中每個像素屬于該直方圖的機率。在下邊原始圖中(左圖),我們框選了一塊四邊形的區域,計算該區域的灰階直方圖,然後通過下面的函數calcBackProject,計算圖像src中每個像素在直方圖中的機率,最終的結果在result中,result中每個像素表示該像素在直方圖中的機率,我們對得到的結果進行二值化,就得到下邊右圖的結果。

      我們框選了一塊白雲區域,但從背投影結果中,海浪的邊緣在直方圖中的機率也很高,這是因為它們的灰階比較相似,如果我們隻想白雲的位置,最好使用三通道的直方圖,然後背投影。

cv::calcBackProject(&src,

    1,            // 一副圖像

    channels,     // 使用的channel

    hist,    // backprojecting的直方圖

    result,       // 結果圖像

    ranges,       //像素值範圍

    255.0         //縮放因子

    );

OpenCV學習(26) 直方圖(3)

完整的代碼:

程式代碼:工程FirstOpenCV20

      下面的程式中,使用BGR三通道直方圖,注意我們框選的範圍包括藍天,也包括白雲,之是以包括藍天白雲,是因為這樣可以剔除海水邊緣白色,我們還對原始圖像進行了減色處理。

OpenCV學習(26) 直方圖(3)

程式代碼:工程FirstOpenCV21

繼續閱讀