6

私はopencv(c ++)を初めて使用し、行検出を実装しようとしています。

私は数本の線のある写真を持っていて、線の間の距離を決定しようとしています。ハフ、キャニーなどがあることは知っていますが、線の間の距離を計算するためにさまざまな線の座標を取得するにはどうすればよいですか?opencvコンター関数を使用する必要がありますか、それともより良い方法がありますか?完全なコードサンプルは必要ありませんが、誰かが仕事を成し遂げるための最良の方法を教えてもらえますか?

4

1 に答える 1

13

ライン検出は、多くの場合、ハフ変換の使用につながります。キャニーエッジ検出器と輪郭検出は、必要な場合にのみ便利なプリプロセッサとして機能します。

平行線がある場合は、

void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 )

2番目のパラメーターに検出が含まれる行を検出する場合:

lines –行の出力ベクトル。各線は、2要素のベクトル(ρ、θ)で表されます。ρは、座標原点(0、0)(画像の左上隅)からの距離です。θは、ラジアン単位の線の回転角です(0〜垂直線、π/ 2〜水平線)。
[opencv2refman.pdf]

これは、2つの線の間の距離がである必要がabs(rho1-rho2)あること、距離がの最初の列のピクセル値間の絶対差であることを意味しますlines。(注:メソッドはここにあるはずCV_HOUGH_STANDARDです!)

平行線の場合、距離として考えるものを定義する必要がありますが、OpenCVは、検出された各線の端点の座標を提供する場合があります。
を使用する必要がありますmethod = CV_HOUGH_PROBABILISTIC

CV_HOUGH_PROBABILISTIC確率的ハフ変換(画像にいくつかの長い線形セグメントが含まれている場合に、より効率的です)。行全体ではなく、行セグメントを返します。各セグメントは開始点と終了点で表され、マトリックスはCV_32SC4タイプである必要があります(作成されるシーケンスは)。
[opencv2refman.pdf]

opencv_tutorials.pdfインストールされているOpenCVのドキュメント内にもチュートリアルがあります。

于 2012-11-22T16:43:14.903 に答える