阈值分割法是一种基于区域的图像分割技术,原理是把图像像素点分为若干类。图像阈值化分割是一种传统的最常用的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。它特别适用于目标和背景占据不同灰度级范围的图像。它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域不具有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。
- import numpy as np
- import cv2
- img=cv2.imread('C:\\Users\\yh\\Pictures\\1.png')
- imginfo=img.shape
- size=(imginfo[1],imginfo[0])
- imgdst=img[100:500,100:500]
- print(size)
-
- gray = cv2.cvtColor(imgdst, cv2.COLOR_BGR2GRAY)
- #超过阈值thresh,值为255,未超过为0。
- ret1, p1 = cv2.threshold(src=gray, thresh=127, maxval=255, type=cv2.THRESH_BINARY)
-
- contours, hierarchy = cv2.findContours(p1, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
- n=len(contours)
- cv_contours=[]
- for contour in contours:
- area=cv2.contourArea(contour)
- if area>1000:
- cv_contours.append(contour)
- cv2.drawContours(imgdst, cv_contours, -1, (0,255,0), 3)
- k = np.ones((3, 3), np.uint8)
- temp = cv2.erode(p1, k)
- p2= cv2.dilate(temp, k)
-
- cv2.imshow('imgdst', imgdst)
- cv2.imshow('p1', p1)
- cv2.imshow('p2', p2)
- cv2.waitKey(0)
- cv2.destroyAllWindows()