10

Python 内から OpenCV 関数 MinAreaRect2 を呼び出そうとしています。私は、Python 2.7 と numpy 1.6 で OpenCV 2.4.2 を使用しています。私はここまで行きました:

import cv

def nda2ipl(arr, dtype=None):
    return cv.fromarray(np.ascontiguousarray(arr, dtype=dtype))

def min_area_rect2(points):
    storage = cv.CreateMemStorage()
    cv_points = nda2ipl(points.reshape((-1, 1, 2)))
    out = cv.MinAreaRect2(cv_points, storage)
return out

この関数は、形状 (N x 2) の ndarray で呼び出すことができます。このような結果が得られます:

((476.5, 604.5), (951.0, 1207.0), -0.0)

最初のタプルはボックスの中心、2 番目のタプルは幅と高さ、最後のタプルは角度であると仮定します。

問題は、これを示す明確な参照を取得できなかったことです。実際、opencv のドキュメントには、関数が Python で何を返すかが記載されています。

この関数に関する公式ドキュメントを見つけましたが、これはあまり役に立ちません。

python の MinAreaRect2 の出力は正確には何ですか? より一般的には、OpenCV python wrapper に関する正確なドキュメントはどこで入手できますか?

4

2 に答える 2

12

OpenCV Pythonラッパーのドキュメントは、通常のドキュメントと一緒に同じサイトwww.docs.opencv.orgに保管されています。

以前に使用されたPythonモジュールはcv、cvMat、cvSeqなどの元のC++インターフェイスからのネイティブデータ型を使用するインターフェイスでした。

その後、より優れた、高度でシンプルなモジュールcv2インターフェイスに移行しました。その中で、すべてがNumpy配列またはネイティブPythonデータ型として返されます。

ここで、返されるタプルには、 cvBox2Dと同じ引数があります。さまざまなPythonラッパーの違いの詳細については、こちらをご覧ください:これらすべてのOpenCV Pythonインターフェースの違いは何ですか?

ここで、あなたの仮定は正しいです。それらの値はあなたが言ったことを正確に指定しました。

回転した長方形を描画する場合は、長方形の4つの頂点が必要です。そのためには、ドキュメントには決して見られない関数、つまりcv2.cv.BoxPoints()が必要です(ただし、心配しないでください。OpenCV2.4.3がリリースされたときにドキュメントに表示されます)。

ここに画像の説明を入力してください

于 2012-08-03T16:26:40.623 に答える
1

リンク先のドキュメントに記載されているように、MinAreaRect2 はBox2D オブジェクトを返します。

CvBox2D オブジェクトは、 here で説明されているように、正しく仮定したように、その中心、サイズ、および角度によって定義されます。

一般的に言えば、Python ラッパーのドキュメントはかなり貧弱です。最善の策は、C++ のドキュメントを参照し、ソース コードを読むことです。

于 2012-08-03T12:24:05.217 に答える