簡體   English   中英

Open CV Contours - 將凹多邊形拆分為多個凸多邊形

[英]Open CV Contours - Splitting concave polygon into multiple convex ones

我在 numpy 數組中有下圖

在此處輸入圖像描述

我想要

  1. 將塊分成單獨的輪廓或任何坐標表示。

  2. 然后我想將任何凹多邊形轉換為多個凸多邊形。

像這樣

在此處輸入圖像描述

到目前為止,我已經設法使用 opencv 將每個塊隔離成輪廓......但是有沒有一種簡單的方法可以將 L 形對象分成兩個或多個方形塊。 如果需要,每個形狀的新輪廓可以重疊。

也可能是我有一個這樣的圖像,它沒有這樣的直線。

在此處輸入圖像描述

我已經使用cv2.approxPolyDP來繪制形狀,但它們又是凹的,我需要將它們分開。

任何幫助表示贊賞。

我能想到的一種方法是,對於每個輪廓,首先找到它的凸包。 看到這個鏈接

現在找到輪廓與其凸包之間的缺陷點。 看到這個鏈接

現在使用缺陷距離的數據,找到距離最大的點。 該點將是 2 個對象以 L 形連接的點。 現在從這一點開始,在該點畫一條與輪廓相切的垂直線,然后再次找到輪廓。 生成的輪廓將是 L 形的 2 個輪廓。

注意:在這種方法中,一個 object 的某些部分可能會在將它們划分為邊界時進入其他部分。

好的,謝謝拉胡爾的回答。

我最終找到了一個 package 幫助我對解決我的問題的多邊形進行分割。

下載:

pip install sect 

然后:

from sect.triangulation import constrained_delaunay_triangles

取由 openCV 生成的輪廓 - 這將生成如下。

在此處輸入圖像描述

然后“平滑”顏色,這樣顏色就更少了。 我用過這個

epsilon = 0.005 * cv2.arcLength(contour, True)
approx = cv2.approxPolyDP(contour, epsilon, True)

然后通過 sect 運行它

constrained_delaunay_triangles([tuple(x) for x in approx.squeeze()])

output 將多邊形分成三角形,完全去除所有凹多邊形。

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM