9

opencv を使用して角の丸い長方形を検出しているときに問題を解決する必要があります。基本的に、同じコード サンプル squares.c を使用しています。

cvFindContours( gray, storage, &contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE );
while( contours )
{
    double area=fabs(cvContourArea(contours, CV_WHOLE_SEQ));
    if(area < minimum_area || area > maximum_area) {
        contours = contours->h_next;
        continue;
    }               
    result = cvApproxPoly( contours, sizeof(CvContour), storage,
        CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.05, 0 );
    if( result->total == 4 &&
        fabs(cvContourArea(result,CV_WHOLE_SEQ)) > 1000 &&
        cvCheckContourConvexity(result) )
        {

このコードを使用すると、通常は画像を検出できますが、画像の遠近感を調整する必要があり、そのために画像の角を検出する必要があります。これを行う方法と画像の角が丸くなっていますか? 問題は、ポイント間でポイントを検出する必要がないために発生します。例として、次の画像を作成しました。黒い線は既存のコードによって検出されたポイントを表し、青い点は必要なものですか?

ここに画像の説明を入力

助けてくれてありがとう。

4

3 に答える 3

5

FindContoursOpenCVの用語では、最初にwithRETR_EXTERNALとを使用して黒い長方形を見つけますCHAIN_APPROX_SIMPLEminAreaRectこれで、で見つかった点を使用して、この円形の長方形の最小バウンディングボックスを見つけることができますFindContours。このバウンディングボックスの角を取得するにはBoxPoints、の戻り値(中心、(幅、高さ)、回転角度)の関数を使用しますminAreaRect。これで、後の赤い線の四隅ができました。

于 2013-01-11T20:40:12.200 に答える
0

cvResize コマンドで画像をより小さいサイズにスケーリングして、そのコードを適用してみてください。理論的に画像サイズを縮小すると、画像の角がシャープになり、精度が低下しますが問題が軽減されます。

于 2013-01-11T09:20:01.427 に答える