ホームページ >バックエンド開発 >C++ >紙の四隅を正確に検出するために OpenCV を最適化するにはどうすればよいですか?

紙の四隅を正確に検出するために OpenCV を最適化するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-24 11:22:10535ブラウズ

How Can OpenCV Be Optimized to Accurately Detect the Four Corners of a Sheet of Paper?

OpenCV を使用した紙の検出 (正方形検出)

初期問題:

開発者は OpenCV の正方形検出サンプルを正常に実装しましたが、出力には不要なものが乱雑に表示されます。輪郭。目標は、結果をフィルタリングして、さらなる処理のために紙の 4 つの隅の点を取得することです。

提案された解決策:

提供されたコード スニペットは、次を使用して正方形を検出します。複数のしきい値レベルを使用し、拡張を使用してエッジ セグメント間の潜在的な穴を排除します。ただし、乱雑なものはフィルタリングされません。この問題を解決するには、find_squares 関数を次のように変更します。

void find_squares(Mat&amp; image, vector<vector<Point> >&amp; 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。