13

OpenCVのHoughLinesまたはHoughLinesP関数は、HoughCircles関数と同様に、行のリストをアキュムレータ順に返しますか?行の順序を知りたいのですが。また、ラインのアキュムレータ値を取得すると非常に便利なので、固定のしきい値の代わりにインテリジェントで適応性のあるしきい値を使用できます。OpenCVを自分で書き直さなくても、注文値またはアキュムレータ値のいずれかを利用できますか?

4

1 に答える 1

15

HoughTransformは、投票数の降順で行を並べ替えます。あなたはここでコードを見ることができます

ただし、関数が戻ると投票数は失われます。投票数を取得する唯一の方法は、OpenCVを変更することです。

良いニュースは、それほど複雑ではないということです。私は一度自分でやったことがあります。出力をからに変更し、最後のパラメータに投票数を入力するのは数分vector< Vec2f >ですvector< Vec3f >

また、CvLinePolarを変更して、3番目のパラメーターを追加する必要があります。houghはに実装されており、そのC上にラッパーがあるC++ため、実装とラッパーの両方を変更する必要があります。

変更する主なコードはここにあります

 for( i = 0; i < linesMax; i++ )
 {
        CvLinePolar line;
        int idx = sort_buf[i];
        int n = cvFloor(idx*scale) - 1;
        int r = idx - (n+1)*(numrho+2) - 1;
        line.rho = (r - (numrho - 1)*0.5f) * rho;
        line.angle = n * theta;

        // add this line, and a field voteCount to CvLinePolar
        // DO NOT FORGET TO MODIFY THE C++ WRAPPER
        line.voteCount = accum[idx];          

        cvSeqPush( lines, &line );
 }
于 2012-07-06T12:04:21.437 に答える