python opencv基于深度优先遍历去除灰度图像中的白色噪声点

遍历灰度图像二维数组,找出第一个白色像素(>=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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值