1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > opencv 二值化 python_Python OpenCV 图像二值化-阈值分割

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

时间:2021-10-30 08:23:59

相关推荐

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()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。