python图像二值化处理_python实现opencv图像二值化
1.什么是圖像二值化
彩色圖像: 有blue,green,red三個(gè)通道,取值范圍均為0-255
灰度圖:只有一個(gè)通道0-255,所以一共有256種顏色
二值圖像:只有兩種顏色,黑色和白色,二值化就是把圖像的像素轉(zhuǎn)變?yōu)?或者255,只有這兩個(gè)像素值。0白色 1黑色 。0是黑色,255是白色。
2.圖像二值化
(2)根據(jù)閾值去二值化圖
(3)threshold函數(shù)
原型:threshold(src,thresh,maxval,type,dst=None)。
作用:將圖像的每個(gè)像素點(diǎn)進(jìn)行二值化。
參數(shù):thresh,閾值(最小值)。maxval,二值化的最大取值。
type,二值化類型,一般設(shè)為0,也可以取以下的值:
(4)全局閾值 -代碼實(shí)現(xiàn)
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("原來(lái)", gray)11
12 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全局自適應(yīng)閾值 參數(shù)0可改為任意數(shù)字但不起作用
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法,,全局自適應(yīng)閾值, 參數(shù)0可改為任意數(shù)字但不起作用,適用于單個(gè)波峰
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)#截?cái)?大于150的是改為150 小于150的保留
29 print("閾值:%s" %ret)30 cv.imshow("截?cái)?", binary)31
32 ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TOZERO)#截?cái)?小于150的是改為150 大于150的保留
33 print("閾值:%s" %ret)34 cv.imshow("截?cái)?", binary)35
36 src = cv.imread("C://1.jpg")37 threshold_image(src)38 cv.waitKey(0)39 cv.destroyAllWindows()
函數(shù)threshold()的參數(shù)說(shuō)明:
cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全局自適應(yīng)閾值 參數(shù)0可改為任意數(shù)字但不起作用
cv.THRESH_BINARY | cv.THRESH_TRIANGLE)#TRIANGLE法,,全局自適應(yīng)閾值, 參數(shù)0可改為任意數(shù)字但不起作用,適用于單個(gè)波峰
cv.THRESH_BINARY)# 自定義閾值為150,大于150的是白色 小于的是黑色
cv.THRESH_BINARY_INV)# 自定義閾值為150,大于150的是黑色 小于的是白色
cv.THRESH_TRUNC)# 截?cái)?大于150的是改為150? 小于150的保留
cv.THRESH_TOZERO)# 截?cái)?小于150的是改為150? 大于150的保留
(5)局部閾值 -代碼實(shí)現(xiàn)
1 #局部閾值
2 deflocal_image(image):3 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)4 cv.imshow("原來(lái)", gray)5 binary1 = cv.adaptiveThreshold(gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 25, 10) #blocksize必須為奇數(shù)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)自己計(jì)算閾值-代碼實(shí)現(xiàn)
1 #-*- coding=GBK -*-
2 importcv2 as cv3 importnumpy as np4
5
6 #求出圖像均值作為閾值來(lái)二值化
7 defcustom_image(image):8 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)9 cv.imshow("原來(lái)", gray)10 h, w = gray.shape[:2]11 m = np.reshape(gray, [1, w*h])#化為一維數(shù)組
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()
參考:
總結(jié)
以上是生活随笔為你收集整理的python图像二值化处理_python实现opencv图像二值化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序云函数 -- 腾讯云通用印刷体
- 下一篇: python统计代码行数_使用Pytho