Python+Opencv图像处理--基于OTSU+凸包检测的粘连大米分割
文章目录
- 前言
- 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+凸包检测的粘连大米分割相关推荐
- Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示
Python+opencv 机器视觉 - 基于霍夫圈变换算法检测图像中的圆形实例演示 第一章:霍夫变换检测圆 ① 实例演示1 ② 实例演示2 ③ 霍夫变换函数解析 第二章:Python + openc ...
- Python+Opencv图像处理新手入门教程(三):阈值与二值化
一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图 1.Intro 今天这节我们主要研究利用阈值处理图像.例如对于输入图像: 如何做一 ...
- Python+OpenCV图像处理(一篇全)
参考:1.网易云课堂 Python+OpenCV图像处理 - 网易云课堂 2.[在水一方xym的博客]业精于勤荒于嬉,行成于思毁于随 - CSDN博客 https://blog.csdn.net/za ...
- Python OpenCV Tesseract实现车牌的检测与识别
python+opencv+TESSERT-OCR实现车牌的检测与识别_啥都不会的小王的博客-CSDN博客python+opencv+TESSERT-OCR实现车牌的检测与识别开学花了十天时间0基础搞 ...
- Python+OpenCV图像处理(五)——图像阈值和二值化
系列文章 Python+OpenCV图像处理(一)--OpenCV框架与图像插值算法 Python+OpenCV图像处理(二)--几何变换 Python+OpenCV图像处理(三)--彩色空间互换 P ...
- python+opencv图像处理之边缘检测车道线识别
python+opencv图像处理之边缘检测车道线识别 1.自行安装python和opencv 2.导入我们要使用的相关库 import cv2 from matplotlib import pypl ...
- Python OpenCV图像处理 理论 代码
python opencv图像处理 GitHub - LeBron-Jian/ComputerVisionPractice OpenCV计算机视觉学习 & 代码 OpenCV计算机视觉学习(1 ...
- Python+Opencv图像处理新手入门教程(四):视频内容的读取与导出
一步一步来吧 上一节: Python+Opencv图像处理新手入门教程(三):阈值与二值化 1.Intro 今天这节我们主要看怎么利用opencv读取并处理视频中的内容. 2.VideoCapture ...
- Python+Opencv图像处理新手入门教程(二):颜色空间转换,图像大小调整,灰度直方图
一步一步来吧 上一节:Python+Opencv图像处理新手入门教程(一):介绍,安装与起步 1.什么是图像 对于计算机而言,图像的本质是一个由像素点构成的矩阵. 例如我们用肉眼很容易分辨一辆汽车的后 ...
最新文章
- Python 打印行列控制(API:pandas.set_option())
- 3.Linux Shell流程控制
- 数据库设计(三)概念数据模型
- 使用Github(基本概念实战操作)
- Exynos1080处理器性能与功耗究竟怎么样?
- python report_python之reportlab
- cad解除块的快捷命令_Auto CAD2007解除块快捷键是什么呢?
- php气泡效果,ps简单制作漂亮的人物气泡效果
- js判断时间是否为今天日期(判断日期与当前日期相差多少天)
- IE浏览器验证码不刷新
- 奇葩需求系列-距离明天十二点倒计时
- 酒店管理系统数据库设计
- bios 刷 灵耀14_华硕笔记本刷完BIOS后一直进不去系统,怎么解决?
- linux 日志查看及操作
- FFmpeg中调用av_read_frame函数导致的内存泄漏问题
- 金蝶Kis旗舰版不能反过账?
- 关于Android模拟器键盘不能使用的解决方法
- 慧荣量产工具4连发(SM3255AA,SM3255AB,SM3252,SM3211)--来自忆捷售后
- Solidworks 2016安装失败因为VC++2005安装失败的解决办法
- Java判断两个日期范围是否超过三个月
热门文章
- 网易面试Java开发凉凉经,面试官:基础不牢,技术不够深入,无缘offer,无缘网易......
- 一文带你学会数据库测试核心内容和流程
- 你知道这些世界级特大桥隐藏的“5G秘密”吗?
- 西部数据在磁盘里加NAND却不用做缓存?
- 为抵制 7-Zip,列出 “三宗罪” ?网友:“第3个才是重点吧?”
- 仿空间留言板简易界面设置
- 2020年第十一届蓝桥杯javaB组省赛
- Win10使用VMware安装黑苹果+xcode安装+优化+win键位设置
- c语言中的输入输出函数之scanf函数
- 输入三角形的三c语言程序,请问c语言中 从键盘输入三角形的3边 调用三角形面积公式求面积 并输.,C语言编写程序,从键盘输入三角形三条边长(实数),计算并输出...