关键单词:
threshold:阈;门槛;起点;开端
美 [ˈθreʃˌhoʊld] 英 [ˈθreʃˌhəʊld]
truncate:截断,删节(尤指掐头或去尾)类似cut
美 [ˈtrʌŋˌkeɪt] 英 [trʌŋˈkeɪt]
adaptive:适应的;有适应能力的
美 [əˈdæptɪv] 英 [ə'dæptɪv]
正反二值化:这种处理的特点是,以127为界线,非黑即白,其中白的显示为255
import numpy as np
import cv2
image1 = cv2.imread("1.jpg", 1)
gray = cv2.cvtColor(image1, cv2.COLOR_RGB2GRAY)
t1, des1_1 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
t2, des1_2 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("11__________", image1)
cv2.imshow("binary______", des1_1)
cv2.imshow("binary_inv__", des1_2)
cv2.waitKey()
cv2.destroyAllWindows()
正反零处理:这种处理的特点是只处理高于(或低于)127的部分,另一部分的保持不变。下图的图三明显可见这种特点。
image1 = cv2.imread("0.jpg", 1)
gray = cv2.cvtColor(image1, cv2.COLOR_RGB2GRAY)
t1, des1_1 = cv2.threshold(gray, 127, 255, cv2.THRESH_TOZERO)
t2, des1_2 = cv2.threshold(gray, 127, 255, cv2.THRESH_TOZERO_INV)
cv2.imshow("11__________", image1)
cv2.imshow("tozero______", des1_1)
cv2.imshow("tozero_inv__", des1_2)
cv2.waitKey()
cv2.destroyAllWindows()
截断处理:这种处理的特点是,将所有值大于127的点,变成127,因此亮部都变暗了,相当于图像不会存在比127大的点(既是截断了)
image1 = cv2.imread("0.jpg", 1)
gray = cv2.cvtColor(image1, cv2.COLOR_RGB2GRAY)
t3, des1_3 = cv2.threshold(gray, 127, 255, cv2.THRESH_TRUNC)
cv2.imshow("gray________", gray)
cv2.imshow("truncate____", des1_3)
cv2.waitKey()
cv2.destroyAllWindows()
OTSU方法:以上的二值化处理、零处理、截断处理,都是设置了127为分界线,使用OTSU方法,可以动态的计算分界线。当然它也有优缺点,比如性能好,又比如对噪点多、背景乱的图像不怎么友好
扩展阅读:http://t.csdnimg.cn/BllZB
image1 = cv2.imread("0.jpg", 1)
gray = cv2.cvtColor(image1, cv2.COLOR_RGB2GRAY)
t1, des1_1 = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 要把127改为0
t2, des1_2 = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow("11___________", gray)
cv2.imshow("binary_______", des1_1)
cv2.imshow("binary_otsu__", des1_2)
cv2.waitKey()
cv2.destroyAllWindows()
自适应处理:这种处理的特点是,将图像分成小块(5,5,19,99),对每块进行求均值(平均值<mean>、高斯均值<gaussian>),以均值 - 加权值(2,2,2,2)为分界线,进行正反二值化处理
扩展阅读:http://t.csdnimg.cn/LEYx7
image1 = cv2.imread("0.jpg", 1)
gray = cv2.cvtColor(image1, cv2.COLOR_RGB2GRAY)
des1_1 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 2)
des1_2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 2)
des1_3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 19, 2)
des1_4 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 99, 2)
cv2.imshow("gray____________", gray)
cv2.imshow("gaussian________", des1_1)
cv2.imshow("mean____________", des1_2)
cv2.imshow("mean_19_________", des1_3)
cv2.imshow("mean_99_________", des1_4)
cv2.waitKey()
cv2.destroyAllWindows()