Python+Opencv图像处理--基于OTSU+凸包检测的粘连大米分割
生活随笔
收集整理的這篇文章主要介紹了
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.提取輪廓
根據以上二值化的圖像提取輪廓,如下圖所示。
根據以上輪廓,看出有多個大米粘連的情況,下面采用凸包檢測。
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+凸包检测的粘连大米分割的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【SAP-PS笔记】如何实现项目部分WB
- 下一篇: 对多旅行商问题:应用、方法和分类进行了全