首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用opencv python去除二值图像中的小杂音点

使用opencv python去除二值图像中的小杂音点
EN

Stack Overflow用户
提问于 2019-07-31 13:28:27
回答 3查看 5.8K关注 0票数 6

我有一个二进制图像,我想使用opencv删除图像中的小白点python.You可以在这里参考我的问题enter link description here

我的原始图像是

我希望输出图像为:

EN

回答 3

Stack Overflow用户

发布于 2019-07-31 15:04:59

这似乎可以使用Python Opencv中的连接组件来工作。

代码语言:javascript
复制
#!/bin/python3.7

import cv2
import numpy as np

src = cv2.imread('img.png', cv2.IMREAD_GRAYSCALE)

# convert to binary by thresholding
ret, binary_map = cv2.threshold(src,127,255,0)

# do connected components processing
nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(binary_map, None, None, None, 8, cv2.CV_32S)

#get CC_STAT_AREA component as stats[label, COLUMN] 
areas = stats[1:,cv2.CC_STAT_AREA]

result = np.zeros((labels.shape), np.uint8)

for i in range(0, nlabels - 1):
    if areas[i] >= 100:   #keep
        result[labels == i + 1] = 255

cv2.imshow("Binary", binary_map)
cv2.imshow("Result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite("Filterd_result.png, result)

请参阅here

票数 9
EN

Stack Overflow用户

发布于 2019-07-31 13:39:38

您可以简单地使用图像平滑技术,如高斯模糊等,以消除图像中的噪声,然后进行二进制阈值处理,如下所示:

代码语言:javascript
复制
img = cv2.imread("your-image.png",0)
blur = cv2.GaussianBlur(img,(13,13),0)
thresh = cv2.threshold(blur, 100, 255, cv2.THRESH_BINARY)[1]

cv2.imshow('original', img)
cv2.imshow('output', thresh)
cv2.waitKey(0)
cv2.destroyAllWinsdows()

输出:

here了解不同的图像平滑/模糊技术。

票数 3
EN

Stack Overflow用户

发布于 2019-07-31 13:49:23

您可以使用closing函数-侵蚀,然后膨胀。它不需要模糊功能。

代码语言:javascript
复制
import cv2 as cv
import numpy as np

img = cv.imread('original',0)
kernel = np.ones((5,5),np.uint8)

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow('original', img)
cv2.imshow('output', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57283802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档