0

以下のコードは、OpenCV からのカメラ キャリブレーションの一部です。少し変更したいだけです。変数errはユークリッド距離式を使用して計算されますがsqrt(x-coordinate diff^2+y-coordinate diff^2)、x 座標の差分のみを考慮したいと考えています。だから私はそれが持っていると書き直しました

err = sqrt((imagePoints[i].x - imagePoints2.x) ^ 2);

imagePoints[i]ただし、 &のベクトルの x 座標値にアクセスできなかったため、エラーが発生していますimagepoints2

errx座標のデルタのみを考慮して変数を書き直すのを手伝ってくれる人はいますか?

static double computeReprojectionErrors(
    const vector<vector<Point3f> >& objectPoints,
    const vector<vector<Point2f> >& imagePoints,
    const vector<Mat>& rvecs, const vector<Mat>& tvecs,
    const Mat& cameraMatrix, const Mat& distCoeffs,
    vector<float>& perViewErrors, bool fisheye)
{

    vector<Point2f> imagePoints2;
    size_t totalPoints = 0;
    double totalErr = 0, err;
    perViewErrors.resize(objectPoints.size());

    for (size_t i = 0; i < objectPoints.size(); ++i)
    {
        if (fisheye)
        {
            fisheye::projectPoints(objectPoints[i], imagePoints2, rvecs[i],            tvecs[i], cameraMatrix,  distCoeffs);
        }
        else
        {
            projectPoints(objectPoints[i], rvecs[i], tvecs[i], cameraMatrix, distCoeffs, imagePoints2);
        }
        err = norm(imagePoints[i], imagePoints2, NORM_L2);

        size_t n = objectPoints[i].size();
        perViewErrors[i] = (float)std::sqrt(err*err / n);
        totalErr += err*err;
        totalPoints += n;
    }

    return std::sqrt(totalErr / totalPoints);
}
4

0 に答える 0