全局二值化
二值化:将图像的每个像素变成两种值,比如0,255.
#cv2.threshold(src,thresh,maxval,type[,dst])
##src 最好是灰度图
##thresh:阈值
##maxval:最大值,最大值不一定是255
##type:操作类型:常见的操作类型如下:
#####THRESH_BINARY
#####THRESH_BINARY_INV
#####THRESH_TRUNC
#####THRESH_TOZERO
#####THRESH_TOZERO_INV
import cv2
import numpy as np
#导入图片
img = cv2.imread('./small.jpg')
#二值化操作是对灰度图像操作,把dog变成灰度图像。
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#注意,threshold会返回两个值,一个是阈值,二值化处理后的图片
thresh,dog1=cv2.threshold(gray,170,255,cv2.THRESH_BINARY)
cv2.imshow('img',img)
# cv2.imshow('dog1',dog1)
cv2.imshow('dog',np.vstack((dog1,gray)))
cv2.waitKey(0)
cv2.destroyAllWindows()
自适应阈值二值化
#此时阈值是根据图像上的每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用的是不同的阈值,
#从而使我们能在亮度不同的情况下得到更好的结果。
#cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst])
####adaptiveMethod:指定计算阈值的方法
######cv2.ADPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值
######cv2.ADPTIVE_THRESH_GAUSSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口。
####Block Size:邻域大小(用来计算阈值的区域大小)
####C:这就是一个常数,阈值等于的平均值或者加权平均值减去这个常数
import cv2
import numpy as np
#导入图片
img = cv2.imread('./big.jpg')
#二值化操作是对灰度图像操作,把dog变成灰度图像。
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#自适应阈值二值化只有一个返回值。
#dst3=cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,3,0)
dst119=cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,119,0)
cv2.imshow('img',img)
cv2.imshow('big',np.vstack((gray,dst119)))
cv2.waitKey(0)
cv2.destroyAllWindows()