2017-09-05 8 views
2

私はopencvプロジェクトに取り組んでおり、書籍といくつかのソースコードであるさまざまなソースに従っています。私は本といくつかのソースコードの違いを発見しました。チェス盤を使用してカメラを較正する場合、チェス盤のコーナーからオブジェクトポイントを定義します。たとえば、左上角は(0,0)で、次の角は(0,1)です。しかし、本では座標系を(y、x)として使用していますが、ソースコードではインターネットで(x、y)を見つけました。右辺は+ x、下辺は+ yです。ソースコードから取らopencv camera calibration object_points orientation

for (int i=0; i<boardSize.height; i++) { 
    for (int j=0; j<boardSize.width; j++) { 
     objectCorners.push_back(cv::Point3f(i, j, 0.0f)); 
    } 
} 

作品:

for (int i = 0; i < board_height; i++) 
     for (int j = 0; j < board_width; j++) 
     obj.push_back(Point3f((float)j * square_size, (float)i * square_size, 0)); 

1が正しい

ブック内のコード

編集:

私は本の次のバージョンをチェックし、ライターは、関連部分で同じループを使用しています。

+0

これは、取得したい3D座標系によって異なります。 – Micka

+0

問題はすべてが同じですが、この部分は同じです。同じ関数が異なる座標系の出力を与えることはできませんか? @ミカ – ssovukluk

+0

あなたは入力を意味する?オブジェクトポイントに対して選択した座標系は任意です。したがって、チェス盤の長い方の面をx軸、y軸、z軸、斜めなど、部屋のどこにでも配置したいかどうかはあなた次第です。 – Micka

答えて

0

オブジェクトポイント用に選択した座標系は任意です。

チェス盤の長い方をx軸、y軸、z軸、斜めなどの部屋にしたいかどうかはあなた次第です。

使用している座標系の制限に留意するだけで済みます。おそらくデカルトです。つまり、「間違った」順序を選択すると、間違った方向からオブジェクトを「見る」ことになります。 これは、なぜ彼らが実験的に本の別の注文を選択したのかということです。

+0

本で使用されているオブジェクトはありません。その単なるコード例、クックブックスタイル。あなたの答えをありがとう。私には十分です。 – ssovukluk

0

Point3fの使用をデモンストレーションしたときに、カメラ較正に関するopenCVのドキュメントにあるhereは、私がリンクしているページの半分以上を使って、ソースコードと同じ方法で使用します)。ドキュメントから

コード:

for(int i = 0; i < boardSize.height; ++i) 
for(int j = 0; j < boardSize.width; ++j) 
    corners.push_back(Point3f(float(j*squareSize), float(i*squareSize), 0)); 

私はドキュメントを模倣し、塩の粒が、行うには良いもので、本を取るには、両方の例を試してみることです。

+0

どのように結果から理解できますか?彼らはかなり近いかもしれません。再投影誤差を比較するか? – ssovukluk

+0

私はまったく考えていません、私は最近openCVを使い始めたばかりで、より多くの情報を探す場所を知っていました。 – hammeramr

+0

同じです。ご回答いただきありがとうございます。 Mickaが述べたように、それは我々の座標系に依存する。 – ssovukluk