python - 在 Python 中从阈值图像中去除小轮廓和噪声
解决方案
如果您尝试删除的 blob 与您要保留的 blob 相比较小,一种方法是在 blob 周围绘制边界框并使用边界框的区域丢弃不需要的 blob。
cnts = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)
rect_areas = []
for c in cnts:
(x, y, w, h) = cv2.boundingRect(c)
rect_areas.append(w * h)
avg_area = mean(rect_areas)
for c in cnts:
(x, y, w, h) = cv2.boundingRect(c)
cnt_area = w * h
if cnt_area < 0.5 * avg_area:
img[y:y + h, x:x + w] = 0
在这里,我要删除面积小于平均面积一半的斑点。您可以通过实验将此值设置为您想要的值。
推荐阅读
- php - 不推荐将编码作为第三个参数传递。使用显式零偏移
- spring-boot - 应用程序无法启动更新 spring-boot-starter 到 2.2.4.RELEASE 由 spring kafka 工厂导致
- typescript - 为什么 gulp 构建过程中的 browserify 步骤会编译我的网络工作者打字稿代码?
- asp.net - 将整个网站重定向到带有 htaccess 文件的 URL
- node.js - 从 Windows PowerShell 运行 node.js 脚本时,未正确解释参数转义
- snowflake-cloud-data-platform - 在 Snowflake 内部阶段确定文件的记录和行分隔符
- entity-framework - EF 包含和 ThenInclude
- flutter - 我如何 navigator.push 一个 showModalBottomSheet 进行颤动?
- javascript - 使用 Feathers JS 4 和 Objection JS 急切加载 - 无法读取未定义的属性“get”
- r - 在数据框中查找单词,返回列名?