opencv 二值化 python_Python OpenCV 图像二值化-阈值分割

1.二值化处理

# 手动二值化处理

# 设置阈值大小 threshold

thresh = 125

# 设置超过阈值像素值的最大值

maxval = 255

# THRESH_BINARY:超过阈值为maxval,否则为0

# THRESH_BINARY_INV:超过阈值为0,否则为maxval(相当于上个参数取反)

# THRESH_TRUNC:超过阈值为thresh,低于阈值灰度值不变

# THRESH_TOZERO:超过阈值灰度值不变,否则为0

# THRESH_TOZERO_INV:超过阈值为0,低于阈值灰度值不变

ret, thresh1 = cv2.threshold(img, thresh, maxval, cv2.THRESH_BINARY)

ret, thresh2 = cv2.threshold(img, thresh, maxval, cv2.THRESH_BINARY_INV)

ret, thresh3 = cv2.threshold(img, thresh, maxval, cv2.THRESH_TRUNC)

ret, thresh4 = cv2.threshold(img, thresh, maxval, cv2.THRESH_TOZERO)

ret, thresh5 = cv2.threshold(img, thresh, maxval, cv2.THRESH_TOZERO_INV)

titles = ['original image', 'Binary', 'binary-inv', 'trunc', 'tozero', 'tozero-inv']

images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):

plt.subplot(2, 3, i+1)

plt.imshow(images[i], 'gray')

plt.title(titles[i])

plt.xticks([])

plt.yticks([])

plt.show()

2.自动二值化处理

img2 = cv2.imread('002.tif', 0)

# rows, cols = img2.shape

# Otsu阈值

ret1, thresh1 = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)

# Otsu可与其他二值化方式一起使用

ret2, thresh2 = cv2.threshold(blur, 0, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)

# # Triangle阈值-很少用到

# ret3, thresh3 = cv2.threshold(img2, 0, 255, cv2.THRESH_TRIANGLE)

# ret4, thresh4 = cv2.threshold(blur, 0, 255, cv2.THRESH_TRIANGLE)

titles = ['original image', "Otsu's", "Otsu's+Binary"] # "Triangle", "Triangle-Otsu's"

images = [img, thresh1, thresh2] # thresh3, thresh4

for i in range(3):

plt.subplot(1, 3, i+1)

plt.imshow(images[i], 'gray')

plt.title(titles[i])

plt.xticks([])

plt.yticks([])

plt.show()

3.自适应二值化

# maxval为像素值的最大值默认设为255

# blockSize为计算像素阈值的像素邻域的大小:3、5、7。。。。、99

# C为从平均值或加权平均值中减去常数,一般设置为0-50

blockSize = 25

C = 5

# 高斯BINARY

thresh1 = cv2.adaptiveThreshold(img2, maxval, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, blockSize, C)

# 高斯BINARY_INV

thresh2 = cv2.adaptiveThreshold(img2, maxval, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, blockSize, C)

# 平均BINARY

thresh3 = cv2.adaptiveThreshold(img2, maxval, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize, C)

# 平均BINARY_INV

thresh4 = cv2.adaptiveThreshold(img2, maxval, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, blockSize, C)

titles = ['original image', "gaussian binary", "gaussian binary_inv", "mean binary", "mean binary_inv"]

images = [img2, thresh1, thresh2, thresh3, thresh4]

for i in range(5):

plt.subplot(2, 3, i+1)

plt.imshow(images[i], 'gray')

plt.title(titles[i])

plt.xticks([])

plt.yticks([])

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值