文章目录

  • 前言
    • 1.分割流程图
    • 2.图像预处理
      • 2.1 改进二值化算法
      • 2.2 形态学运算
    • 3.提取轮廓
    • 4.凸包检测
    • 5.标记大米

前言

转载请注明本文出处。

最近一段时间一直在看粘连分割,网上也有很多demo,找了一个大米的图像做测试。以下是本篇文章正文内容,下面案例可供参考。

1.分割流程图

分割总流程图如下图所示:

2.图像预处理

图像预处理包括图像二值化+形态学运算。

2.1 改进二值化算法

此处二值化思想参考本博客上一篇文章《OTSU改进算法-python》,
输入原图:
输入图像水印已经去除,方便大家测试。

二值化对比:

1.直接采用二值化算法进行二值化,

_, mask = cv.threshold(image_gray, 115, 255, cv.THRESH_BINARY)

直接采用二值化效果图:

2.采用adaptive_otsu思想进行二值化,效果如下图所示:

可以看出二值化效果有了非常大的提升,为后续分割处理打下了基础。

2.2 形态学运算

此处采用3x3的核对图像开运算

kernel = np.ones((3, 3), np.uint8)
image_bin = cv.morphologyEx(mask, cv.MORPH_OPEN, kernel)

3.提取轮廓

根据以上二值化的图像提取轮廓,如下图所示。

_, contours, hierarchy = cv.findContours(image_bin, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

根据以上轮廓,看出有多个大米粘连的情况,下面采用凸包检测。

4.凸包检测

凸包检测为了找到图中粘连的大米,从图中可以看出共有三处大米粘连,下图黄色框部分:

求取凸包数量:

for i in range(len(contours)):cnt = contours[i]hull = cv.convexHull(cnt, returnPoints=False)

此处给定阈值T1(阈值根据自己实际情况设定),判断凸包数量是否进入下一步,检测缺陷点。

if len(hull) > T1:defects = cv.convexityDefects(cnt, hull)

如果defects数量>1符合条件将缺陷点连线,如下图所示:

cv.line(mask, defects_point[0], defects_point[1],0)


5.标记大米

消除粘连后画出所有轮廓外接矩,及中心点,最终结果如下图所示:

cv.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0))  # 绘制外接矩
cv.circle(image, (cx, cy), 1, (0, 0, 255), -1)  # 用圆点绘制目标重心

Python+Opencv图像处理--基于OTSU+凸包检测的粘连大米分割相关推荐

  1. Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示

    Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示 第一章:霍夫变换检测圆 ① 实例演示1 ② 实例演示2 ③ 霍夫变换函数解析 第二章:Python + openc ...

  2. Python+Opencv图像处理新手入门教程(三):阈值与二值化

    一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...

  3. Python+OpenCV图像处理(一篇全)

    参考:1.网易云课堂 Python+OpenCV图像处理 - 网易云课堂 2.[在水一方xym的博客]业精于勤荒于嬉,行成于思毁于随 - CSDN博客 https://blog.csdn.net/za ...

  4. Python OpenCV Tesseract实现车牌的检测与识别

    python+opencv+TESSERT-OCR实现车牌的检测与识别_啥都不会的小王的博客-CSDN博客python+opencv+TESSERT-OCR实现车牌的检测与识别开学花了十天时间0基础搞 ...

  5. Python+OpenCV图像处理(五)——图像阈值和二值化

    系列文章 Python+OpenCV图像处理(一)--OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)--几何变换 Python+OpenCV图像处理(三)--彩色空间互换 P ...

  6. python+opencv图像处理之边缘检测车道线识别

    python+opencv图像处理之边缘检测车道线识别 1.自行安装python和opencv 2.导入我们要使用的相关库 import cv2 from matplotlib import pypl ...

  7. Python OpenCV图像处理 理论 代码

    python opencv图像处理 GitHub - LeBron-Jian/ComputerVisionPractice OpenCV计算机视觉学习 & 代码 OpenCV计算机视觉学习(1 ...

  8. Python+Opencv图像处理新手入门教程(四):视频内容的读取与导出

    一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(三):阈值与二值化 1.Intro 今天这节我们主要看怎么利用opencv读取并处理视频中的内容. 2.VideoCapture ...

  9. Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图

    一步一步来吧 上一节:Python+Opencv图像处理新手入门教程(一):介绍,安装与起步 1.什么是图像 对于计算机而言,图像的本质是一个由像素点构成的矩阵. 例如我们用肉眼很容易分辨一辆汽车的后 ...

最新文章

  1. Python 打印行列控制(API:pandas.set_option())
  2. 3.Linux Shell流程控制
  3. 数据库设计(三)概念数据模型
  4. 使用Github(基本概念实战操作)
  5. Exynos1080处理器性能与功耗究竟怎么样?
  6. python report_python之reportlab
  7. cad解除块的快捷命令_Auto CAD2007解除块快捷键是什么呢?
  8. php气泡效果,ps简单制作漂亮的人物气泡效果
  9. js判断时间是否为今天日期(判断日期与当前日期相差多少天)
  10. IE浏览器验证码不刷新
  11. 奇葩需求系列-距离明天十二点倒计时
  12. 酒店管理系统数据库设计
  13. bios 刷 灵耀14_华硕笔记本刷完BIOS后一直进不去系统,怎么解决?
  14. linux 日志查看及操作
  15. FFmpeg中调用av_read_frame函数导致的内存泄漏问题
  16. 金蝶Kis旗舰版不能反过账?
  17. 关于Android模拟器键盘不能使用的解决方法
  18. 慧荣量产工具4连发(SM3255AA,SM3255AB,SM3252,SM3211)--来自忆捷售后
  19. Solidworks 2016安装失败因为VC++2005安装失败的解决办法
  20. Java判断两个日期范围是否超过三个月

热门文章

  1. 网易面试Java开发凉凉经,面试官:基础不牢,技术不够深入,无缘offer,无缘网易......
  2. 一文带你学会数据库测试核心内容和流程
  3. 你知道这些世界级特大桥隐藏的“5G秘密”吗?
  4. 西部数据在磁盘里加NAND却不用做缓存?
  5. 为抵制 7-Zip,列出 “三宗罪” ?网友:“第3个才是重点吧?”
  6. 仿空间留言板简易界面设置
  7. 2020年第十一届蓝桥杯javaB组省赛
  8. Win10使用VMware安装黑苹果+xcode安装+优化+win键位设置
  9. c语言中的输入输出函数之scanf函数
  10. 输入三角形的三c语言程序,请问c语言中 从键盘输入三角形的3边 调用三角形面积公式求面积 并输.,C语言编写程序,从键盘输入三角形三条边长(实数),计算并输出...