900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 数字图像处理之阈值分割

数字图像处理之阈值分割

时间:2023-11-10 08:05:53

相关推荐

数字图像处理之阈值分割

本章节主要包括下面的内容:

导入库

import numpy as npimport matplotlib.pyplot as pltimport cv2 as cv

输出图片

def show(img):if img.ndim == 2:plt.imshow(img,cmap='gray')else:plt.imshow(cv.cvtColor(img,cv.COLOR_RGB2BGR))plt.show()

直方图阈值

阈值类型,可以具体类型如下:

#1.直方图阈值img = cv.imread('E:/DataSolve/mf2.jpg',0)plt.hist(img.ravel(),256,[0,256])plt.show()_,img_bin = cv.threshold(img,125,255,cv.THRESH_BINARY)#125是阈值,255是设置的最大值show(np.hstack([img,img_bin]))

三角法阈值

与直方图大同小异

#2.三角法阈值th,img_bin = cv.threshold(img,0,255,cv.THRESH_TRIANGLE)print(th)show(np.hstack([img,img_bin]))

迭代法阈值分割

#迭代法阈值分割T = img.mean()while True:t0 = img[img<T].mean()t1 = img[img >= T].mean()t = (t0+t1)/2if abs(T-t)<1:breakT=tT = int (T)print(f"Best threshold = {T}")

大津法阈值及实现

#大津法阈值th,img_bin = cv.threshold(img,-1,255,cv.THRESH_OTSU)show(img_bin)#自我实现大津法Sigma = -1T = 0for t in range(0,256):bg = img[img<t]obj = img[img>=t]p0 = bg.size/img.sizep1 = obj.size/img.sizem0 = 0 if bg.size == 0 else bg.mean()m1 = 0 if obj.size == 0 else obj.mean()sigma = p0*p1*(m0-m1)**2if sigma>Sigma:Sigma = sigmaT=tprint(th,T)

自适应阈值分割

#自适应阈值分割#opencv自带img = cv.imread('E:/DataSolve/1.jpg',0)img_adapt = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,21,6)show(img_adapt)#自己实现自适应阈值分割#方法一C = 6winSize = 21img_blur = cv.blur(img,(winSize,winSize))img_bin1 = np.uint8(img>img_blur-C)*255#方法二alpha = 0.05winSize = 21img_blur = cv.GaussianBlur(img,(winSize,winSize),5)img_bin = np.uint8(img>(1-alpha)*img_blur)*255show(np.hstack([img_adapt,img_bin1,img_bin]))

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