使用OpenCV 偵測一張紙(方形偵測)
初始問題:
初始問題:開發人員成功實現了OpenCV 方形檢測範例,但輸出充滿了不必要的輪廓。目標是過濾結果以獲得一張紙的四個角點以進行進一步處理。
建議的解決方案:void find_squares(Mat& image, vector<vector<Point> >& squares) { ... [code as before] ... // Filter out unnecessary contours and store the largest square vector<Point> largestSquare; double maxArea = 0; for (auto& square : squares) { double area = fabs(contourArea(Mat(square))); if (area > maxArea) { maxArea = area; largestSquare = square; } } squares.clear(); // Clear existing squares vector squares.push_back(largestSquare); // Store the largest square }
提供的程式碼片段使用以下方法檢測正方形多個閾值等級並使用擴張消除邊緣段之間的潛在空洞。然而,它並沒有過濾掉雜亂。要解決此問題,請修改find_squares 函數,如下所示:
最終輸出:套用此修改後,產生的向量方塊將僅包含四個偵測到的紙張的角點作為影像中最大的正方形。然後,這可以用於減少傾斜或進一步的影像處理任務。以上是OpenCV如何優化才能準確偵測一張紙的四個角落?的詳細內容。更多資訊請關注PHP中文網其他相關文章!