python图像二值化处理_python实现opencv图像二值化
1.什么是圖像二值化
彩色圖像: 有blue,green,red三個通道,取值范圍均為0-255
灰度圖:只有一個通道0-255,所以一共有256種顏色
二值圖像:只有兩種顏色,黑色和白色,二值化就是把圖像的像素轉變為0或者255,只有這兩個像素值。0白色 1黑色 。0是黑色,255是白色。
2.圖像二值化
(2)根據閾值去二值化圖
(3)threshold函數
原型:threshold(src,thresh,maxval,type,dst=None)。
作用:將圖像的每個像素點進行二值化。
參數:thresh,閾值(最小值)。maxval,二值化的最大取值。
type,二值化類型,一般設為0,也可以取以下的值:
(4)全局閾值 -代碼實現
1 #-*- coding=GBK -*-
2 importcv2 as cv3 importnumpy as np4
5
6 #圖像二值化 0白色 1黑色
7 #全局閾值
8 defthreshold_image(image):9 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)10 cv.imshow("原來", gray)11
12 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全局自適應閾值 參數0可改為任意數字但不起作用
13 print("閾值:%s" %ret)14 cv.imshow("OTSU", binary)15
16 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)#TRIANGLE法,,全局自適應閾值, 參數0可改為任意數字但不起作用,適用于單個波峰
17 print("閾值:%s" %ret)18 cv.imshow("TRIANGLE", binary)19
20 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY)#自定義閾值為150,大于150的是白色 小于的是黑色
21 print("閾值:%s" %ret)22 cv.imshow("自定義", binary)23
24 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY_INV)#自定義閾值為150,大于150的是黑色 小于的是白色
25 print("閾值:%s" %ret)26 cv.imshow("自定義反色", binary)27
28 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TRUNC)#截斷 大于150的是改為150 小于150的保留
29 print("閾值:%s" %ret)30 cv.imshow("截斷1", binary)31
32 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TOZERO)#截斷 小于150的是改為150 大于150的保留
33 print("閾值:%s" %ret)34 cv.imshow("截斷2", binary)35
36 src = cv.imread("C://1.jpg")37 threshold_image(src)38 cv.waitKey(0)39 cv.destroyAllWindows()
函數threshold()的參數說明:
cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全局自適應閾值 參數0可改為任意數字但不起作用
cv.THRESH_BINARY | cv.THRESH_TRIANGLE)#TRIANGLE法,,全局自適應閾值, 參數0可改為任意數字但不起作用,適用于單個波峰
cv.THRESH_BINARY)# 自定義閾值為150,大于150的是白色 小于的是黑色
cv.THRESH_BINARY_INV)# 自定義閾值為150,大于150的是黑色 小于的是白色
cv.THRESH_TRUNC)# 截斷 大于150的是改為150? 小于150的保留
cv.THRESH_TOZERO)# 截斷 小于150的是改為150? 大于150的保留
(5)局部閾值 -代碼實現
1 #局部閾值
2 deflocal_image(image):3 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)4 cv.imshow("原來", gray)5 binary1 = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 25, 10) #blocksize必須為奇數6 cv.imshow("局部1", binary1)7 binary2 = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)#高斯處理
8 cv.imshow("局部2", binary2)
(6)自己計算閾值-代碼實現
1 #-*- coding=GBK -*-
2 importcv2 as cv3 importnumpy as np4
5
6 #求出圖像均值作為閾值來二值化
7 defcustom_image(image):8 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)9 cv.imshow("原來", gray)10 h, w = gray.shape[:2]11 m = np.reshape(gray, [1, w*h])#化為一維數組
12 mean = m.sum() / (w*h)13 print("mean:", mean)14 ret, binary = cv.threshold(gray, mean, 255, cv.THRESH_BINARY)15 cv.imshow("二值", binary)16
17
18 src = cv.imread("C://1.jpg")19 custom_image(src)20 cv.waitKey(0)21 cv.destroyAllWindows()
參考:
總結
以上是生活随笔為你收集整理的python图像二值化处理_python实现opencv图像二值化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序云函数 -- 腾讯云通用印刷体
- 下一篇: RGB和RGBA之间的转换