OpenCV-Python 直方圖-3:二維直方圖|二十八

2020-12-03 人工智慧遇見磐創

目標

在本章中,我們將學習查找和繪製2D直方圖。這將在以後的章節中有所幫助。

介紹

在第一篇文章中,我們計算並繪製了一維直方圖。 之所以稱為一維,是因為我們僅考慮一個特徵,即像素的灰度強度值。 但是在二維直方圖中,您要考慮兩個特徵。 通常,它用於查找顏色直方圖,其中兩個特徵是每個像素的色相和飽和度值。

已經有一個python示例(samples / python / color_histogram.py)用於查找顏色直方圖。 我們將嘗試了解如何創建這種顏色直方圖,這對於理解諸如直方圖反向投影之類的更多主題將很有用。

OpenCV中的二維直方圖

它非常簡單,並且使用相同的函數cv.calcHist()進行計算。 對於顏色直方圖,我們需要將圖像從BGR轉換為HSV。(請記住,對於一維直方圖,我們從BGR轉換為灰度)。對於二維直方圖,其參數將進行如下修改:

channel = [0,1],因為我們需要同時處理H和S平面。bins = [180,256] 對於H平面為180,對於S平面為256。range = [0,180,0,256] 色相值介於0和180之間,飽和度介於0和256之間。現在檢查以下代碼:

import numpy as npimport cv2 as cvimg = cv.imread('home.jpg')hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)hist = cv.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])就是這樣。

Numpy中的二維直方圖

Numpy還為此提供了一個特定的函數:np.histogram2d()。(記住,對於一維直方圖我們使用了np.histogram())。

import numpy as npimport cv2 as cvfrom matplotlib import pyplot as pltimg = cv.imread('home.jpg')hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])第一個參數是H平面,第二個是S平面,第三個是每個箱子的數量,第四個是它們的範圍。

現在我們可以檢查如何繪製這個顏色直方圖。

繪製二維直方圖

方法1:使用 cv.imshow()

我們得到的結果是尺寸為80x256的二維數組。因此,可以使用cv.imshow()函數像平常一樣顯示它們。它將是一幅灰度圖像,除非您知道不同顏色的色相值,否則不會對其中的顏色有太多了解。

方法2:使用Matplotlib

我們可以使用matplotlib.pyplot.imshow()函數繪製具有不同顏色圖的2D直方圖。它使我們對不同的像素密度有了更好的了解。但是,除非您知道不同顏色的色相值,否則乍一看並不能使我們知道到底是什麼顏色。我還是更喜歡這種方法。它簡單而更好。

注意使用此功能時,請記住,插值法應採用最近鄰以獲得更好的結果。

考慮下面的代碼:

import numpy as npimport cv2 as cvfrom matplotlib import pyplot as pltimg = cv.imread('home.jpg')hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)hist = cv.calcHist( [hsv], [0, 1], None, [180, 256], [0, 180, 0, 256] )plt.imshow(hist,interpolation = 'nearest')plt.show()下面是輸入圖像及其顏色直方圖。X軸顯示S值,Y軸顯示色相。

在直方圖中,您可以在H = 100和S = 200附近看到一些較高的值。它對應於天空的藍色。同樣,在H = 25和S = 100附近可以看到另一個峰值。它對應於宮殿的黃色。您可以使用GIMP等任何圖像編輯工具進行驗證。

方法3:OpenCV示例樣式

OpenCV-Python2示例中有一個顏色直方圖的示例代碼(samples / python / color_histogram.py)。如果運行代碼,則可以看到直方圖也顯示了相應的顏色。或者簡單地,它輸出顏色編碼的直方圖。其結果非常好(儘管您需要添加額外的線束)。

在該代碼中,作者在HSV中創建了一個顏色圖。然後將其轉換為BGR。將所得的直方圖圖像與此顏色圖相乘。他還使用一些預處理步驟來刪除小的孤立像素,從而獲得良好的直方圖。

我將其留給讀者來運行代碼,對其進行分析並擁有自己的解決方法。下面是與上面相同的圖像的代碼輸出:

您可以在直方圖中清楚地看到存在什麼顏色,那裡是藍色,那裡是黃色,並且由於棋盤的存在而有些白色。很好!

相關焦點

  • 「python opencv視覺零基礎」十四、直方圖反向投影
    前文提醒:博主正在參加博客之星評比,成功入選Top200,現在暫居第九歡迎各位點擊了解更多幫我投票,非常感謝~目錄「python opencv 計算機視覺零基礎實戰」 第一節「python opencv視覺入門到實戰」二、格式與攝像頭「python opencv 視覺入門到實戰」 三、圖像編輯「python
  • OpenCV-Python 直方圖-2:直方圖均衡|二十七
    例如,在人臉識別中,在對人臉數據進行訓練之前,對人臉圖像進行直方圖均衡化處理,使其具有相同的光照條件。OpenCV中的直方圖均衡OpenCV具有執行此操作的功能cv.equalizeHist()。它的輸入只是灰度圖像,輸出是我們的直方圖均衡圖像。
  • 深入理解OpenCV+Python直方圖均衡化
    直方圖均衡化是圖像處理領域中利用圖像直方圖對對比度進行調整的方法。
  • OpenCV-Python 直方圖-4:直方圖反投影|二十九
    目標在本章中,我們將學習直方圖反投影。理論這是由Michael J. Swain和Dana H. Ballard在他們的論文《通過顏色直方圖索引》中提出的。直方圖反投影與camshift算法等配合使用。我們該怎麼做呢?我們創建一個圖像的直方圖,其中包含我們感興趣的對象(在我們的示例中是背景,離開播放器等)。對象應儘可能填充圖像以獲得更好的效果。而且顏色直方圖比灰度直方圖更可取,因為對象的顏色對比灰度強度是定義對象的好方法。
  • OpenCV-Python 直方圖-1:查找、繪製和分析|二十六
    當今幾乎所有圖像處理工具都提供直方圖功能。以下是劍橋彩色網站的圖片,我建議您訪問該網站以獲取更多詳細信息。您可以看到圖像及其直方圖。(請記住,此直方圖是針對灰度圖像而非彩色圖像繪製的)。直方圖的左側區域顯示圖像中較暗像素的數量,而右側區域則顯示明亮像素的數量。從直方圖中,您可以看到暗區域多於亮區域,而中間調的數量(中間值的像素值,例如127附近)則非常少。
  • 基於OpenCv 和 Python 的手指識別及追蹤
    翻譯 | 餘杭 Lamaric 校對 | 吳曉曼 審核 | 餘杭詳細代碼參考:https://github.com/amarlearning/opencv手指追蹤是許多計算機視覺應用的重要特徵。在該應用中,使用基於直方圖的方法將手與背景幀分離。
  • Python學習第89課-數據可視化之直方圖繪製
    【每天幾分鐘,從零入門python編程的世界!】假設你想投資某一個城市的房地產,你肯定需要對這個城市的人口分布、增長潛力做一個調查,這時我們就需要做一個直方圖(histogram plot)。實例:假設我們有一份C城市的人口年齡的數據,我們為方便起見,在這裡只列出很少的一部分數據,用一個列表City_C_Age表示這個城市的人口年齡數據:City_C_Age=[2,3,1,7,4,5,3,1,7,6,9,8,13,16,12,17,15,14,18,,20,23,28,25,23,27,25,29,26,24,25,30,34,37,36,38,32,35,37,36,41,42,47,47,48,43,46,44,53,54,58,52,51,55,56,69,60,63,67,64,72,74,78,75,89,85,83,90,93
  • 圖像算法工程師必備:灰度直方圖
    圖像的灰度直方圖,大概是數字圖像處理專業課接觸到的第一節講圖像具體算法的一堂課了。所謂的灰度直方圖,就是統計一個8比特的灰度圖像,其灰度等級從0到255的像素的分布情況。我們很容易就能想到,一幅圖像對應唯一的直方圖,而同一直方圖肯定會對應很多不同的圖像。
  • 一萱攝影 淺談攝影裡的直方圖 什麼是直方圖
    直方圖就是一個描述所拍攝的畫面裡邊明暗像素分布情況的一個曲線圖,圖1它是一張二維的坐標圖(圖1),橫軸代表的是圖像中的亮度圖3圖3這張整體都比較偏黑的,來看看它的直方圖,發現大部分像素基本上都是集中在暗部,這是一張嚴重曝光不足的照片。
  • MedCalc16: 4.3.1分布圖: 直方圖
    4.3 分布圖MedCalc的分布圖包括直方圖(histogram)、累積頻率分布圖(cumulative frequency distribution
  • 直方圖是什麼,及直方圖在攝影中的應用
    作為一張圖片的「資料庫」,直方圖裡基本包含了圖片的所有數據,我們可以通過直方圖來了解照片的真實信息。學會直方圖,不論是在前期拍攝,還是在照片的後期修飾,都能起到事半功倍的效果。今天,我們就從以下幾個部分來深入了解直方圖。
  • 頻數直方圖簡稱為直方圖的各種圖形
    頻數直方圖簡稱為直方圖,是用來顯示某一種質量特性數據的分布狀況的。直方圖由一系列寬度相等高度不同的相鄰長方形組成,橫坐標表示產品質量特性值,長方形的寬度就是數據分組的組距間隔,縱坐標表示每組內數據的頻數,也就是每組內產品的數目。
  • 什麼是直方圖,攝影中直方圖怎麼看?
    圖片中的直方圖顯示了每種顏色(紅色,藍色和綠色)的像素值分布,它們與次要顏色(洋紅色,青色和黃色)重疊,最後顯示了包含所有三種顏色並顯示為灰色的區域。直方圖分析當圖像曝光良好時,直方圖將在中間包含大條形圖,而在邊緣周圍則幾乎沒有信息。
  • python可視化:matplotlib繪製直方圖進階篇!
    在上篇文章中介紹了直方圖的前五個參數,實際上直方圖一共有十幾個參數,剩下的參數利用這篇文章解釋清楚,讓大家能夠將如何繪製直方圖理解的透透的。bottom參數這個參數的含義也很直觀,底部的意思,指的是條形的底從哪裡開始。
  • 超級詳細的直方圖應用步驟及分析,一篇搞定直方圖!
    3. 雙峰型:有兩個高峰出現。兩臺不同的機器或兩種不同原料間存在差異時,或者作業者不同時也可發生此類直方圖。例如,病歷質控的2位質控員對檢查標準掌握有差異時,又或者同一位質控員應用兩種評估標準檢測的結果。出現這類情況時,應將數據層別處理後再製作直方圖。4.
  • Photoshop直方圖
    2、初打開的照片及直方圖雖然是對應的關係,但此時的直方圖並不十分準確,需要單擊直方圖右上角帶嘆號(!)的三角標誌才可以,這個標誌稱為高速緩存。高速緩存:顯示高速緩存圖標時,表示當前顯示的直方圖並不是照片的真實直方圖,單擊關閉高速緩存,才會顯示最準確的直方圖。
  • 攝影必學知識,直方圖 3 大誤區!
    直方圖是大家非常熟悉的一個後期工具,也是非常重要的一個後期工具,照片的許多信息都隱藏在直方圖之中,因此我們非常有必要認識和了解直方圖。直方圖直方圖中的彩色部分是通道直方圖,一共有紅、綠、藍這三種通道直方圖,例如上面這張圖中凸起最高的三個峰分別是藍色通道直方圖
  • 學攝影,不會「直方圖」怎麼行?教你快速讀懂直方圖
    拍攝時,我們可以通過直方圖來量化判斷一張照片過曝、欠曝還是正常曝光,而後期處理過程中,一張照片屬於怎樣的影調,也可以用直方圖來參考。可以說直方圖是數碼攝影的核心工具,也被戲稱為攝影「X光片」。那麼,關於直方圖,你又了解多少呢?直方圖是什麼?
  • 教大家解讀直方圖的作用,學會看懂直方圖是攝影的基礎
    這節課教大家如何看懂直方圖,直方圖顯示是什麼?大家看一下,左上角是拍攝一張純白色的畫面,在來看直方圖,直方圖右側有一個峰值起來了,其他部分是空的,如果拍攝一張純黑色的畫面(左下角)大家看直方圖的峰值在最左側,其他地方也都沒有峰值,在看右上純灰色畫面,峰值又出現在正中的位置,左右是空的,右下角從純黑到純白漸變的這麼一個畫面,整個直方圖顯得非常飽滿,這說明了越是偏向直方圖的右側,它記錄的是畫面亮的信息
  • 你絕對看得懂直方圖!照片直方圖的講解與攝影應用
    無論是攝影前期還是後期我們都經常會用到直方圖,剛接觸攝影的人可能有點不好理解,不過不要緊,讀完此文你可以充分理解並在拍攝過程種使用它,並用它來提高你的拍照水平。它實際上很容易使用。直方圖是照片色調範圍的圖形表示,可幫助你評估曝光。