遍历灰度图像二维数组,找出第一个白色像素(>=50)坐标后深度遍历,得到相连白色区域面积,判断面积大小是否近似噪声点大小(area<=30),满足判断条件将白色区域置零,继续遍历直至全部像素点遍历完成。
import numpy as np
import cv2
np.set_printoptions(threshold=np.inf)
class solution(object):
def maxArea(self,img):
self.maxsum=0
row=len(img)#存储行数
col=len(img[0])#存储列数
img1=np.zeros((row,col))
for i in range(row):
for j in range(col):
if img[i][j]>=50 and img1[i][j]!=2:
current=1
self.m=[]
x,img1=self.dfs(i,j,current,img,img1)#测量面积
if x <= 30:
for c in self.m:
m=c[0]
n=c[1]
img[m][n] = 0
return self.maxsum#最后返回最大面积
def dfs(self,i,j,current,img,img1):
img1[i][j]=2
self.m.append((i,j))
if i>0 and img[i-1][j]>=50 and img1[i-1][j]!=2:
current,img1=self.dfs(i-1,j,current+1,img,img1)
if i<len(img)-1 and img[i+1][j]>=50 and img1[i+1][j]!=2:
current,img1=self.dfs(i+1,j,current+1,img,img1)
if j>0 and img[i][j-1]>=50 and img1[i][j-1]!=2:
current,img1=self.dfs(i,j-1,current+1,img,img1)
if j<len(img[0])-1 and img[i][j+1]>=50 and img1[i][j+1]!=2:
current,img1=self.dfs(i,j+1,current+1,img,img1)
self.maxsum=max(self.maxsum,current)#更新最大面积变量
return current,img1
img1=cv2.imread(r"E:\img.bmp",cv2.IMREAD_GRAYSCALE)
img_array = np.asarray(img1)
img=img_array.copy()
solution().maxArea(img_array)
img2=img_array.astype(np.uint8)
y=img2.shape[0]
for x in range(y):
img2[x][0]=255
imghstack = np.hstack((img, img2))
cv2.imshow('2',imghstack)
cv2.waitKey()