有人可以很好地解釋 epsilon 的作業原理嗎?
這就是我使用它的方式。
cv::approxPolyDP(contour, approx, cv::arcLength(contour, true) * precision, true);
作為默認值double precision=0.02。
對我來說沒有意義的事情是precision形狀檢測越低越不嚴格?
例如,如果我正在尋找影像中的矩形輪廓并且并非所有矩形輪廓都被檢測到并且precision設定為0.5(更高)甚至更少的矩形輪廓被檢測為矩形。但是如果我設定precision為0.01(更低)檢測到更多的矩形輪廓???
不應該反過來嗎?更低precision= 更嚴格的形狀檢測?
uj5u.com熱心網友回復:
approxPolyDP實作了Ramer–Douglas–Peucker 演算法
該演算法不檢測形狀,它簡化了輪廓。
它會洗掉對輪廓形狀貢獻很小(epsilon)的點。共線點是一個微不足道的情況,因為它們對輪廓形狀的貢獻為零。最突出的角落是站立的。結果是輸入輪廓的近似值。
更緊密的 epsilon 會強制進行更忠實的近似,留下更多的點,直到所有剩余的點(無動作)。
請注意,對于帶有圓角的正方形/矩形/四邊形,不會保留四邊形邊緣的位置。圓角上的點仍然存在。但是,近似值可用于分割原始輪廓,丟棄“角”點,并處理邊緣點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/479048.html
