opencv的二值化1( 用Otsu’s二值化,找到双峰阈值)

来源:互联网 发布:iyst是什么预算软件 编辑:程序博客网 时间:2024/06/15 14:13
import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('thresh1.PNG',0)# global thresholdingret1,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)# Otsu's thresholdingret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)# Otsu's thresholding after Gaussian filtering# ( 5,5 )为高斯核的大小, 0 为标准差blur = cv2.GaussianBlur(img,(5,5),0)# 阈值一定要设为 0 !ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)# plot all the images and their histogramsimages = [img, 0, th1,img, 0, th2,blur, 0, th3]titles = ['Original Noisy Image','Histogram','Global Thresholding (v=127)','Original Noisy Image','Histogram',"Otsu's Thresholding",'Gaussian filtered 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 + 2].flatten(),2)  plt.title(titles[i*3+1]),plt.xticks(np.linspace(0,250,3))  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()
阅读全文
0 0