私はcvCalibrateCamera2を使用しようが、私は回転行列が適切に定義されていないというエラーが表示されます。
cvCalibrateCamera2 - 回転行列を適切に定義する方法は?
...calibration.cpp:1495: error: (-5) the output array of rotation vectors must be 3-channel 1xn or nx1 array or 1-channel nx3 or nx9 array, where n is the number of views
私はすでにその情報からあらゆる可能性を試してみましたが、私はまだ、このエラーを取得します。
マイコード:
CvMat *object_points = cvCreateMat((int)pp.object_points.size(), 1, CV_32FC3);
CvMat *image_points = cvCreateMat((int)pp.image_points.size(), 1, CV_32FC2);
const CvMat point_counts = cvMat((int)pp.point_counts.size(), 1, CV_32SC1, &pp.point_counts[0]);
for (size_t i=0; i<pp.object_points.size(); i++)
{
object_points->data.fl[i*3+0] = (float)pp.object_points[i].x;
object_points->data.fl[i*3+1] = (float)pp.object_points[i].y;
object_points->data.fl[i*3+2] = (float)pp.object_points[i].z;
image_points->data.fl[i*2+0] = (float)pp.image_points[i].x;
image_points->data.fl[i*2+1] = (float)pp.image_points[i].y;
}
CvMat* tempR = cvCreateMat(1, 3, CV_32F);
cvCalibrateCamera2(object_points, image_points, &point_counts,
cvSize(pp.width, pp.height), camera->m_calib_K,
camera->m_calib_D, tempR, &tempData->m_calib_T,
CV_CALIB_USE_INTRINSIC_GUESS)
// camera->calib_T is defined as:
// double m_calib_T_data[3];
// cvMat(3, 1, CV_64F, camera->m_calib_T_data);
私はcvCalibrateCamera2で使用される回転行列は1×3でなければなりません(そして、私は3×3行列を取得するにはロドリゲスの機能を使用したい)が、それが言及した任意の他の組み合わせとして機能していないと思いました間違っている
アイデア?
そして私は、私は文が明確だと思うのOpenCV 2.4.0(多分そこにバグがその方法ではあるが、いくつかの理由のために、私はOpenCVの新しいバージョンを使用することはできません)
まずは、C++です。なぜあなたはこれがC#だと思いますか?次に、cvCalibrateCamera2を使用した後、50x3の行列(回転行列)と50x3の変換行列を取得すると、nx = 50のビューを持つ場合、3x3カメラ回転行列と1x3変換ベクトルを取得する方法は? –
@never_ever:はい。ステレオキャリブレーション(ステレオキャリブレーション()関数などを使用していないため、私はステレオキャリブレーションとは思えません)を取得することができる回転変換オブジェクトは、チェッカーボードを使用して従来の方法でモノカメラをキャリブレーションしていると仮定しますイメージプレーンから(多くの)チェッカーボードプレーンへの相対的な変換です(逆も同様です)。別の何かが期待されましたか? (C++については間違いですが、私はpythonでopenCVを使い始めました) – marcoresk