使用Python,OpenCV从图像中删除轮廓

  • 1. 效果图
  • 2. 步骤
  • 3. 源码
  • 4. 参考

1. 使用Python、OpenCV计算轮廓的中心并标记
2. 使用Python、OpenCV检测轮廓的形状并标记
3. 使用颜色通道统计信息来标记形状的实际颜色并标记

该博文可以看做是以上3篇的进阶版,这篇博客将介绍从图像中删除指定的轮廓;

1. 效果图

在保留矩形的同时删除圆/椭圆,效果图如下:

2. 步骤

从图像中删除轮廓的基本算法如下所示:

  1. 在图像中检测并找到轮廓;
  2. 分别在轮廓上循环;
  3. 确定轮廓是否需要删除,并应根据一些标准删除;
  4. 累积一个个需要被删除的轮廓的遮罩Mask;
  5. 使用按位“与”将累积的不良轮廓遮罩应用于原始图像。

算法本身非常简单,需要注意和考虑的主要是步骤3,确定是否应该删除轮廓。

3. 源码

# USAGE
# python remove_contours.py# 导入必要的包
import numpy as np
import imutils
import cv2# 在保留矩形的同时删除圆/椭圆,矩形有四条边。圆没有边。
# 如果近似有4个点(顶点),则轮廓将保持不变,表示轮廓是矩形。
def is_contour_bad(c):# 近似轮廓peri = cv2.arcLength(c, True)approx = cv2.approxPolyDP(c, 0.02 * peri, True)# 如果不是矩形则认为是bad轮廓,需要删除return not len(approx) == 4# 加载图形图像,将其转换为灰度,并检测边缘
image = cv2.imread("shapes.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edged = cv2.Canny(gray, 50, 100)
cv2.imshow("Original", image)# 寻找轮廓,并初始化要删除的轮廓mask
cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts) #兼容不同opencv版本获取轮廓
mask = np.ones(image.shape[:2], dtype="uint8") * 255 #初始化一个mask# 遍历轮廓
for c in cnts:# 如果轮廓需要删除,则绘制在mask上以累积轮廓if is_contour_bad(c):cv2.drawContours(mask, [c], -1, 0, -1)# 在图像上移除轮廓,并展示结果图像
# 注意轮廓是如何在白色背景上显示为黑色形状的。这是因为当应用cv2.bitwise功能时,原始图像的白色区域将被mask中的黑色区域替换。
image = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("Mask", mask)
cv2.imshow("After", image)
cv2.waitKey(0)

4. 参考

  • https://www.pyimagesearch.com/2015/02/09/removing-contours-image-using-python-opencv/

使用Python,OpenCV从图像中删除轮廓相关推荐

  1. OpenCV在图像中寻找轮廓的实例(附完整代码)

    OpenCV在图像中寻找轮廓的实例 OpenCV在图像中寻找轮廓的实例 OpenCV在图像中寻找轮廓的实例 #include "opencv2/imgcodecs.hpp" #in ...

  2. OpenCV在图像中寻找轮廓

    OpenCV在图像中寻找轮廓 在图像中寻找轮廓 目标 代码 结果 在图像中寻找轮廓 目标 在本教程中,您将学习如何: 使用OpenCV函数cv :: findContours 使用OpenCV函数cv ...

  3. 使用Python,OpenCV寻找图像中的轮廓

    使用Python和OpenCV查找图像中的形状 1. 效果图 2. 步骤 3. 源码 参考 这篇博客将讨论使用Python和OpenCV查找图像中的形状,具体是 cv2.inRange在图像中查找形状 ...

  4. Python+Opencv寻找图像中最亮的区域

    目录 一.场景需求解读 二.算法原理简介 三.算法代码实现 四.代码运行步骤 五.算法效果展示和分析 六.思维扩展 参考资料 注意事项 一.场景需求解读   在有些现实场景中,我们需要去使用算法自动的 ...

  5. 教你如何使用 OpenCV检测图像中的轮廓

    @Author:Runsen 轮廓是连接所有具有某种颜色或强度的连续点的闭合曲线,它们代表图像中发现的对象的形状.轮廓检测是一种用于形状分析和物体检测和识别的有用技术. 轮廓检测并不是图像分割的唯一算 ...

  6. python怎么绘制坐标图像_如何使用给定的坐标和python opencv在图像中绘制点?

    I have one image and one co-ordinate (X, Y). How to draw a point with this co-ordinate on the image. ...

  7. OpenCV 在图像中寻找轮廓

    使用OpenCV函数 findContours 使用OpenCV函数 drawContours 滤波--消除噪声 增强--使边界轮廓更加明显 检测--选出边缘点 例程 #include "o ...

  8. 使用Python和OpenCV检测图像中的条形码

    使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...

  9. Python+OpenCV:图像轮廓

    Python+OpenCV:图像轮廓 轮廓是什么? 轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色和强度. 轮廓线是形状分析.目标检测和识别的重要工具. 为了获得更好的精度,可 ...

最新文章

  1. CSS属性中Display与Visibility
  2. Linux_Centos中搭建nexus私服
  3. Linux 基础——查看文件内容的命令
  4. linux文件解压zip文件,linux下解压zip文件报错
  5. Shoutem旨在成为React Native移动应用领域的WordPress
  6. 《剑指Offer》 矩形覆盖
  7. Flask框架——上下文、flask_script扩展
  8. 怎么用计算机搜索文件,Win7系统如何使用内置搜索功能筛选文件名与内容
  9. python函数参数类型及其顺序
  10. date工具类 DateUtils.java
  11. 大连东软信息学院附近java_大连东软信息学院暑期实训java项目答辩答案
  12. 标准模块 queue
  13. 代码,代码,多少梦想葬身于汝!
  14. 移动接入资源发布技术
  15. oracle14047,Oracle数据库之ORA-14047
  16. WPS如何用Excel制作甘特图
  17. cf 667div3
  18. python裁剪不规则区域_Python实现不规则图形填充的思路
  19. MAC上安装Ubantu双系统
  20. iOS Memory 内存详解

热门文章

  1. ContentProvider是如何实现数据共享的
  2. 2021年大数据Flink(四十四):​​​​​​扩展阅读 End-to-End Exactly-Once
  3. CentOS7安装Composer
  4. RxJava 内置多种用于调度的线程类型
  5. python几种数据类型的取值方式
  6. DB2数据库常用语句
  7. STM8S103 解决Rom空间不足 Map文件分析
  8. mysql集群安装(centos)
  9. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】
  10. 我们如此努力,也不过是个普通人