直方圖(Histogram)是一種統計圖資料,在影像處理中最常被用來統計一張圖像或是感興趣(ROI)區域的色彩分布,在這邊本人使用的EmguCV 2.4.0版的內建直方圖工具只有被包含在WinForm應用程式中
至於要如何在WPF繪製直方圖,那就要花比較多的步驟了,我們得自己畫,這部分後續文章會在介紹
所以接下來介紹的繪製環境是在C#的WinForm專案,
前言
直方圖(Histogram)是一種統計圖資料,在影像處理中最常被用來統計一張圖像或是感興趣(ROI)區域的色彩分布,在這邊本人使用的EmguCV 2.4.0版的內建直方圖工具只有被包含在WinForm應用程式中
至於要如何在WPF繪製直方圖,那就要花比較多的步驟了,我們得自己畫,這部分後續文章會在介紹
所以接下來介紹的繪製環境是在C#的WinForm專案,
步驟
1.加入HistogramBox元件到WinForm
點選上排工具 –> 選擇工具箱 –> .Net Framework 元件中點選選擇,找到EmguCV專案下的Emgu.CV.UI.dll
並把dll加入後再次看一下.Net Framework 元件便會發現:
詳細的加入方式可以參考小歐ou | 菜鳥自救會的[C#] OpenCV 初體驗文章
2.在Form的設計工具箱中便會找到HistogramBox
3.繪製直方圖
在EmguCV中有三種繪製直方圖的方式:使用HistogramBox、HistogramViewer這兩個元件或是自己繪製出來(自己繪製出來我會在之後的文章中介紹如何完成)
那麼HistogramBox與HistogramViewer又是差在哪兒呢?
HistogramViewer不需要事先拉到設計視窗中,他是彈出視窗,你只需要直接使用便可以
HistogramBox則需要事先拉視窗中設定在視窗畫面
繪製的方式我們可以直接透過把圖像放到EmguCV的儲存圖片資料結構-Image<TColor,TDepth>並把此結構給予上述兩個元件即可
imgPath = loadImgFile(); //圖片路徑的字串值
loadImg = new Image< bgr, byte >(imgPath);
//顯示圖片
ImageViewer viewer = new ImageViewer(loadImg, "Loaded Image");
viewer.Show(this);
//1.使用HistogramViewer
HistogramViewer.Show(loadImg[0], 32); //image[0] 顯示Blue,bin = 32
HistogramViewer.Show(loadImg, 32); //顯示所有通道
//2.使用HistogramBox
imgHistogramBox.GenerateHistograms(loadImg, 32);
imgHistogramBox.Refresh(); //更新資料
imgHistogramBox.Show();
但是以上的步驟,我們無法取得直方圖的資料結構,其實最重要的就是拿到值記錄著圖像色彩分布的直方圖資料了,有了他,我們後續的影像處理才能實際利用到! 至於要怎麼拿到,本人會在下一篇介紹
最後顯示的畫面
Channel也就是影像的通道,一般彩色影像分為三通道Blue,Green,Red,直方圖可以用來取得特通道的彩色分布狀況,水平軸的座標值代表的是像素值(0-255),縱軸則是各像素值在圖上的像速點總累積數
所以便可以透過這個方式得知這張影像顏色的分布情況
HelloHistogramForm_drawhist_by_histogrambox.zip
結論
不過雖然可以得知三個通道分布色彩,但是並不是很好意識到,如果想要看到有各種顏色的顏色高低分布
變就要自己畫了,而且我們還需要換成另一種色彩通道會比較容易觀看,至於怎麼繪製還請各位稍等等
下一篇-計算直方圖
參考資料
顏色直方圖的計算、顯示、處理、對比及反向投影(How to Use Histogram? Calculate, Show, Process, Compare and BackProject)
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)
另外要轉載請附上出處 感謝