► 前言 本篇將介紹使用OpenCV Python對於圖像上的二值化操作,二值化主要用途包括圖像分割、物體偵測、文字識別等。這種轉換可以幫助檢測圖像中的物體或特定特徵,並提取有用的信息。透過程式碼的說明,讓各位了解OpenCV Python於圖像處理上的基本操作。 ► 二值化定義 將一幅灰度圖像轉換為黑白圖像的過程。它的目標是將灰度圖像中的每個像素點分為兩個類別:一個是前景(通常是物體或感興趣的區域),另一個是背景。二值化後的圖像中只包含兩種值,通常是0和255(或1),分別表示黑色(背景)和白色(前景)。 ►固定閾值二值化(Thresholding) 將圖像的每個像素值與一個固定閾值進行比較,將像素值分為兩個類別:大於閾值的設為一個值(通常是255),小於閾值的設為另一個值(通常是0)。
►自適應閾值二值化(Adaptive Thresholding) 自適應閾值二值化允許根據圖像的局部區域調整閾值。它將圖像分為許多小區域,並為每個區域自動計算閾值。這對於處理不均勻光照的圖像特別有用。 ►Otsu's 二值化 ►TRIANGLE 二值化 TRIANGLE 二值化是另一種自動選擇閾值的方法,通常適用於單峰分佈的圖像。它根據直方圖的形狀選擇閾值。 ►選擇適當的二值化方法和閾值 在OpenCV中選擇適當的二值化方法和閾值通常取決於圖像特性和應用需求。 可以先分析圖像的特性
以上方的範例圖片進行直方圖顯示,範例圖片偏向單峰分佈,透過TRIANGLE 二值化可以很明顯的前後景區分出來。
透過以上講解,搭配程式碼進行範例講解,相信各位對於圖像上的二值化操作能有更深刻的理解,期待下一篇博文吧! ►Q&A 問題一:二值化為甚麼要灰度圖? 二值化通常應用在灰度圖像上,而不是彩色圖像,是因為灰度圖像只包含亮度信息,它是一種單通道圖像,每個像素點的值表示亮度強度,而不考慮顏色信息。在進行二值化時,我們主要關心的是像素的亮度值是否大於或小於閾值,因此使用灰度圖像更簡單且具有優勢。 問題二:在OpenCV中如何評估和調整二值化的效果? 可以使用OpenCV來將原始圖像、二值化結果和任何後處理的圖像進行可視化,以便比較和分析,或是透過評估指標IoU(Intersection over Union)或Dice係數,用於評估分割的準確性。 問題三:如何選擇適當的閾值和二值化方法? 選擇適當的閾值和二值化方法取決於影像的特性和應用需求。您可以通過觀察影像的直方圖來估計閾值,或者使用自適應閾值方法。不同的應用可能需要不同的閾值和二值化方法,您可以通過試驗不同的組合來找到最適合的選擇。 問題四:如何處理彩色影像的二值化? 對於彩色影像,通常需要將其轉換為灰度影像,然後進行二值化處理。可以使用cv2.cvtColor將彩色影像轉換為灰度影像,然後選擇適當的二值化方法進行處理。在某些情況下,也可以分別處理每個通道的灰度影像,然後組合它們以獲得最終的二值化結果。 問題五:自適應閾值二值化的優勢是什麼? 自適應閾值二值化能夠應對不同區域的光照變化,使閾值能夠根據局部影像特性自動調整。這使其適用於具有不均勻照明的影像,例如文件掃描或工業檢測。 |