一、图像二值化
图像二值化是指将图像上像素点的灰度值设定为0或255,即整个图像出现显著的黑白成果的过程。
二、python图像二值化解决
1.opencv简略阈值cv2.threshold
2.opencv自适应阈值cv2.adaptiveThreshold
有两种办法可用于计算自适应阈值:mean_c和guassian_c
3.Otsu's二值化
三、示例:
import cv2import numpy as npfrom matplotlib import pyplot as plt img = cv2.imread('scratch.png', 0)# global thresholdingret1, th1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)# Otsu's thresholdingth2 = 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 histogramsimages = [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学习教程和视频!