OpenCV 圖像二值化 threshold


一:什么是二值圖像

彩色圖像:三個通道0-255,0-255,0-255,所以可以有2^24位空間

灰度圖像:一個通道0-255,所以有256種顏色

二值圖像:只有兩種顏色,黑和白,1白色,0黑色

二:圖像二值化

(一)先獲取閾值

(二)根據閾值去二值化圖像

(三)OpenCV中的二值化方法

四)補充閾值類型

原灰度圖像的像素值

1.THRESH_BINARY:過門限的值為最大值,其他值為0

2.THRESH_BINARY_INV:過門限的值為0,其他值為最大值

3.THRESH_TRUNC:過門限的值為門限值,其他值不變

 

4.THRESH_TOZERO:過門限的值不變,其他設置為0

5.THRESH_TOZERO_INV:過門限的值為0,其他不變

三:代碼實現全局閾值

 cv.threshold( src, thresh, maxval, type[, dst] ) 

參數說明:

src:原圖像。

dst:結果圖像。

thresh:當前閾值。

maxVal:最大閾值,一般為255.

thresholdType:閾值類型,主要有下面幾種:

 1 enum ThresholdTypes {
 2 THRESH_BINARY = 0,
 3 THRESH_BINARY_INV = 1,
 4 THRESH_TRUNC = 2,
 5 THRESH_TOZERO = 3,
 6 THRESH_TOZERO_INV = 4,
 7 THRESH_MASK = 7,
 8 THRESH_OTSU = 8,
 9 THRESH_TRIANGLE = 16
10 };

 

(一)全局閾值使用THRESH_OTSU大津法

1    def threshold_demo(image):
2     gray = cv.cvtColor(image,cv.COLOR_RGB2GRAY)   #要二值化圖像,要先進行灰度化處理
3     ret, binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
4     print("threshold value: %s"%ret)  #打印閾值,前面先進行了灰度處理0-255,我們使用該閾值進行處理,低於該閾值的圖像部分全為黑,高於該閾值則為白色
5     cv.imshow("binary",binary)  #顯示二值化圖像 

threshold value: 140.0  #獲取的閾值是140

(二)全局閾值使用THRESH_TRIANGLE(三角形算法)

ret, binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_TRIANGLE)

threshold value: 67.0

(三)上面使用大津法和三角形算法都是自動去獲取閾值,下面我們自己直接指定閾值

(1)THRESH_BINARY_INV大於閾值的都為0

ret, binary = cv.threshold(gray,127,255,cv.THRESH_BINARY_INV)

threshold value: 127.0

(2)THRESH_TRUNC截斷大於127的值都為127

ret, binary = cv.threshold(gray,127,255,cv.THRESH_TRUNC)

(3)THRESH_TOZERO小於閾值的都為0和(1)相反

ret, binary = cv.threshold(gray,127,255,cv.THRESH_TOZERO)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM