[OpenCV基礎][Python]二值化影像

更新於 發佈於 閱讀時間約 4 分鐘

二值化影像在數位影像表示中,僅包含0與1的值。

在什麼情境下會用到二值化影像呢?,在影像處理中,我們想要求一些特定的數值,例如圓的直徑,或物體的尺寸,等等。

二值化影像圖

黑為0,白為1

二值化影像(黑代表0,白代表1)

二值化影像(黑代表0,白代表1)


常用的應用如下:

  1. 物體檢測和分割: 在許多計算機視覺應用中,我們可能需要檢測並分割圖像中的物體。二值化可以幫助我們將物體背景區分開來,從而進行後續的分析和識別。
  2. 邊緣檢測: 二值化可以用於強調圖像中的邊緣。這對於檢測物體的外形或進行邊緣檢測算法的應用很有用。
  3. 圖像分析和測量: 在進行圖像分析時,我們可能需要測量特定區域大小形狀等特徵。二值化可以使這些特徵更加突顯,便於進行測量分析
  4. 文檔辨識: 在文檔辨識和文字提取中,常常使用二值化影像來清晰地區分文字背景,使得後續的文字識別更加準確。

二值化語法

cv2.threshold是OpenCV 中用於影像二值化的函式

retval, threshold_image = cv2.threshold(src, thresh, maxval, type[, dst])
  • src: 輸入的灰度影像,即要進行二值化處理的原始影像。
  • thresh: 二值化的閾值,超過這個閾值的像素值將被分為高於閾值或低於閾值的兩個類別,具體取值根據不同的應用需求。
  • maxval: 超過閾值的像素值將被賦予的新值,通常是最大值,例如 255(白色)。
  • type: 二值化操作的類型,有不同的選項,例如:
    • cv2.THRESH_BINARY: 大於閾值的像素賦予 maxval小於閾值的像素賦予 0
    • cv2.THRESH_BINARY_INV: 與 cv2.THRESH_BINARY 相反大於閾值的像素賦予 0小於閾值的像素賦予 maxval
    • cv2.THRESH_TRUNC: 大於閾值的像素賦予閾值小於閾值的像素保持不變
    • cv2.THRESH_TOZERO: 大於閾值的像素保持不變小於閾值的像素賦予 0
    • cv2.THRESH_TOZERO_INV: 與 cv2.THRESH_TOZERO 相反,大於閾值的像素賦予 0小於閾值的像素保持不變
  • dst(選用): 輸出的二值化影像。如果未提供,則函數會修改 src 本身。

cv2.threshold 的返回值 retval 是實際使用的閾值,根據不同的二值化方法,retval 可能與指定的閾值 thresh 有所不同。threshold_image則是二值化後的影像


程式範例

在這個例子中,我們使用 cv2.THRESH_BINARY 進行二值化,閾值 thresh_value 為 128,大於 128 的像素賦予 255(白色),小於等於 128 的像素賦予 0(黑色)。

import cv2

# 讀取灰度影像
image = cv2.imread('path/to/your/image.jpg', cv2.IMREAD_GRAYSCALE)

# 二值化
thresh_value = 128
_, binary_image = cv2.threshold(image, thresh_value, 255, cv2.THRESH_BINARY)

# 顯示原始影像和二值化後的影像
cv2.imshow('Original Image', image)
cv2.imshow('Binary Image', binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
灰階二值化後

灰階二值化後


自動選擇閾值

Otsu's 方法是一種自動計算二值化閾值的算法,它基於影像的灰度分佈,試圖找到一個最佳的閾值,以最大程度地區分前景和背景。

cv2.THRESH_OTSU 被用於 cv2.threshold 函數的 type 參數中。這樣,閾值 thresh 的值將根據 Otsu's 方法自動計算

# 使用 Otsu's 方法進行自動二值化
_, binary_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

在使用 cv2.THRESH_OTSU 時,你無需手動指定閾值 thresh,而是將 thresh 參數設為 0。cv2.threshold 函數會根據 Otsu's 方法計算最適合的閾值。

自動選擇閥值比較圖

自動選擇閥值比較圖

在某些情境中,自動選擇閥值可以得到一個不錯的二值化結果圖



留言
avatar-img
留言分享你的想法!
螃蟹_crab-avatar-img
發文者
2024/08/15
[OpenCV][Python]局部二值化(Local Thresholding)提及了這篇文章,趕快過去看看吧!
avatar-img
螃蟹_crab的沙龍
147會員
261內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/02/15
在電腦視覺應用中,輪廓(Contour)常用來描述物體的邊界。 當圖像中有雜訊或物體邊緣過於複雜時,我們可以利用輪廓逼近技術,將輪廓簡化成較少點數的多邊形,這不僅有助於後續的形狀分析,也能提高處理速度。 本文將介紹如何使用 OpenCV 中的 cv2.arcLength 與 cv2.approx
Thumbnail
2025/02/15
在電腦視覺應用中,輪廓(Contour)常用來描述物體的邊界。 當圖像中有雜訊或物體邊緣過於複雜時,我們可以利用輪廓逼近技術,將輪廓簡化成較少點數的多邊形,這不僅有助於後續的形狀分析,也能提高處理速度。 本文將介紹如何使用 OpenCV 中的 cv2.arcLength 與 cv2.approx
Thumbnail
2024/12/02
中值濾波器(Adaptive Median Filter)是一種針對噪聲去除的圖像處理技術,主要應用於處理含有椒鹽雜訊的圖像,但在椒鹽雜訊過大時就會面臨,若為了處理掉雜訊,使用的處理窗口(kernel)就要大一點,會造成圖像的邊緣模糊掉。 後面為解決這個問題,就發展了自適應中值濾波器,其概念源自於
Thumbnail
2024/12/02
中值濾波器(Adaptive Median Filter)是一種針對噪聲去除的圖像處理技術,主要應用於處理含有椒鹽雜訊的圖像,但在椒鹽雜訊過大時就會面臨,若為了處理掉雜訊,使用的處理窗口(kernel)就要大一點,會造成圖像的邊緣模糊掉。 後面為解決這個問題,就發展了自適應中值濾波器,其概念源自於
Thumbnail
2024/10/03
在影像處理中,形態學操作是非常重要的一種技術,能夠幫助我們去除噪點、強化特徵、修復物體的形狀等。形態學操作的核心是「結構元素」(kernel),不同形狀的結構元素會產生不同的處理效果。本文將介紹如何使用不同形狀的結構元素來進行圖像處理,並結合實際程式範例和測試圖片來說明其效果。
Thumbnail
2024/10/03
在影像處理中,形態學操作是非常重要的一種技術,能夠幫助我們去除噪點、強化特徵、修復物體的形狀等。形態學操作的核心是「結構元素」(kernel),不同形狀的結構元素會產生不同的處理效果。本文將介紹如何使用不同形狀的結構元素來進行圖像處理,並結合實際程式範例和測試圖片來說明其效果。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
本文將說明如何去辨識出圖片文字​位置及高寬。
Thumbnail
用小畫家隨意畫三個圈分別用紅藍綠,我們利用cv2.inRange與搭配cv2.bitwise_and,將紅球過濾出來吧。 程式範例 因為OpenCV中cv2.imread讀取圖檔預設讀取是為[B,G,R]的格式,所以設置紅色範圍要注意設定在R的範圍內。
Thumbnail
用小畫家隨意畫三個圈分別用紅藍綠,我們利用cv2.inRange與搭配cv2.bitwise_and,將紅球過濾出來吧。 程式範例 因為OpenCV中cv2.imread讀取圖檔預設讀取是為[B,G,R]的格式,所以設置紅色範圍要注意設定在R的範圍內。
Thumbnail
介紹OpenCV中的cv2.matchTemplate和cv2.minMaxLoc函數的使用方法和參數,提供程式範例以及相關特徵匹配的詳細介紹,讓讀者對此有更深入的瞭解。
Thumbnail
介紹OpenCV中的cv2.matchTemplate和cv2.minMaxLoc函數的使用方法和參數,提供程式範例以及相關特徵匹配的詳細介紹,讓讀者對此有更深入的瞭解。
Thumbnail
觀看本文將可以學習到如何利用Numpy求得物件的邊緣點,及算出物件的寬跟高。 有詳細的程式邏輯說明,及各函式用法說明。 綠點及紅點則是採樣到的邊界點,比較粗的點是偵測到的最大值 完整程式碼 import cv2 import numpy as np import matplotl
Thumbnail
觀看本文將可以學習到如何利用Numpy求得物件的邊緣點,及算出物件的寬跟高。 有詳細的程式邏輯說明,及各函式用法說明。 綠點及紅點則是採樣到的邊界點,比較粗的點是偵測到的最大值 完整程式碼 import cv2 import numpy as np import matplotl
Thumbnail
瞭解二值化影像的應用和程式語法,包括物體檢測和分割、邊緣檢測、圖像分析和測量、文檔辨識,以及使用cv2.threshold的參數和程式範例。
Thumbnail
瞭解二值化影像的應用和程式語法,包括物體檢測和分割、邊緣檢測、圖像分析和測量、文檔辨識,以及使用cv2.threshold的參數和程式範例。
Thumbnail
直方圖是對圖像中像素強度分布的圖形表示。通過分析直方圖,我們可以獲得有關圖像對比度、亮度和色彩分佈的有用信息。
Thumbnail
直方圖是對圖像中像素強度分布的圖形表示。通過分析直方圖,我們可以獲得有關圖像對比度、亮度和色彩分佈的有用信息。
Thumbnail
在某些特別的情況下,需要去調整亮度及對比度,讓我們想要的影像特徵更加明顯 本文將介紹利用這兩個函數 cv2.convertScaleAbs 和 cv2.addWeighted 來調整亮度及對比度。
Thumbnail
在某些特別的情況下,需要去調整亮度及對比度,讓我們想要的影像特徵更加明顯 本文將介紹利用這兩個函數 cv2.convertScaleAbs 和 cv2.addWeighted 來調整亮度及對比度。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News