乐趣区

关于python:python图像二值化处理

一、图像二值化

图像二值化是指将图像上像素点的灰度值设定为 0 或 255,即整个图像出现显著的黑白成果的过程。

二、python 图像二值化解决

1.opencv 简略阈值 cv2.threshold

2.opencv 自适应阈值 cv2.adaptiveThreshold

有两种办法可用于计算自适应阈值:mean_c 和 guassian_c

3.Otsu’s 二值化

三、示例:

import cv2
import numpy as np
from matplotlib import pyplot as plt
 
img = cv2.imread('scratch.png', 0)
# global thresholding
ret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
# Otsu's thresholding
th2 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
# Otsu's thresholding
# 阈值肯定要设为 0 !
ret3, th3 = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# plot all the images and their histograms
images = [img, 0, th1, img, 0, th2, img, 0, th3]
titles = ['Original Noisy Image', 'Histogram', 'Global Thresholding (v=127)',
  'Original Noisy Image', 'Histogram', "Adaptive Thresholding",
  'Original Noisy Image', 'Histogram', "Otsu's Thresholding"
]
# 这里应用了 pyplot 中画直方图的办法, plt.hist, 要留神的是它的参数是一维数组
# 所以这里应用了(numpy) ravel 办法, 将多维数组转换成一维, 也能够应用 flatten 办法
# ndarray.flat 1-D iterator over an array.
# ndarray.flatten 1-D array copy of the elements of an array in row-major order.
for i in range(3):
  plt.subplot(3, 3, i * 3 + 1), plt.imshow(images[i * 3], 'gray')
  plt.title(titles[i * 3]), plt.xticks([]), plt.yticks([])
  plt.subplot(3, 3, i * 3 + 2), plt.hist(images[i * 3].ravel(), 256)
  plt.title(titles[i * 3 + 1]), plt.xticks([]), plt.yticks([])
  plt.subplot(3, 3, i * 3 + 3), plt.imshow(images[i * 3 + 2], 'gray')
  plt.title(titles[i * 3 + 2]), plt.xticks([]), plt.yticks([])
plt.show()

对于图像二值化相干知识点举荐查看:

python 全局图像二值化

如何二值化图像
更多 python 学习欢送进入 segmentfault 学习网,收费分享 python 学习教程和视频!

退出移动版