OpenCV を使用した紙の検出 (正方形検出)
初期問題:
開発者は OpenCV の正方形検出サンプルを正常に実装しましたが、出力には不要なものが乱雑に表示されます。輪郭。目標は、結果をフィルタリングして、さらなる処理のために紙の 4 つの隅の点を取得することです。
提案された解決策:
提供されたコード スニペットは、次を使用して正方形を検出します。複数のしきい値レベルを使用し、拡張を使用してエッジ セグメント間の潜在的な穴を排除します。ただし、乱雑なものはフィルタリングされません。この問題を解決するには、find_squares 関数を次のように変更します。
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 }
最終出力:
この変更を適用すると、結果のベクトル正方形には 4 つの四角形のみが含まれます。検出された紙の角の点を画像内の最大の正方形として検出します。これは、スキュー低減やさらなる画像処理タスクに使用できます。
以上が紙の四隅を正確に検出するために OpenCV を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。