为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用python删除位图图像蒙版中的小岛补丁?

如何使用python删除位图图像蒙版中的小岛补丁?

蓝山帝景 2021-10-26 18:16:42
我是图像处理的新手,正在从事一个项目,我需要将叶子的图像从背景中分离出来作为项目的一部分。我能够使用 OpenCV 创建一个掩码,但有一些补丁应该删除。你可以看下图来清楚地理解我的意思:
查看完整描述

2 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

在文档的这一上,使用开口作为小点,并使用形态梯度填充图像的中间。


查看完整回答
反对 回复 2021-10-26
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

尝试这个:


import cv2

import numpy as np 


input = cv2.imread('source.png')

gray = cv2.cvtColor(input, cv2.COLOR_BGR2GRAY)


#find all contours

img = cv2.pyrDown(gray)

_, threshed = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)

contours,_ = cv2.findContours(threshed, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)


#find maximum contour and draw   

cmax = max(contours, key = cv2.contourArea) 

epsilon = 0.002 * cv2.arcLength(cmax, True)

approx = cv2.approxPolyDP(cmax, epsilon, True)

cv2.drawContours(input, [approx], -1, (0, 255, 0), 3)


cv2.imshow("Contour", input)


width, height = gray.shape


#fill maximum contour and draw   

img = np.zeros( [width, height, 3],dtype=np.uint8 )

cv2.fillPoly(img, pts =[cmax], color=(255,255,255))


cv2.imshow("Filtered", img)


cv2.waitKey(0)

cv2.destroyAllWindows()

算法:


FindContours方法。您可以调整 epsilon 参数。

以最大数量 - 这是你的叶子。

填充这个最大计数并绘制它。现在您可以平滑它或执行任何其他形态学操作。

结果:

//img1.sycdn.imooc.com//6177d5e80001589604890284.jpg

查看完整回答
反对 回复 2021-10-26
  • 2 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信