OpenCV的不失真点是否也能纠正它们?
我试图通过使用带有两个摄像头的OpenCV 2.3.1来确定两个对象之间的距离,但无法计算对象的objectPoints OCV 2.3.1、MSVC++、Windows 7。我认为这是因为在计算视差之前,图像点没有被校正 我先做什么 第一步。自行校准每个摄像头 二,。我所相信的 目标: 我正在尝试不失真并校正来自1号摄像机和2号摄像机的图像中一个物体的图像点。我做了两次这个过程:一次是当泥鸽在发射器上时,一次是在泥鸽解体前的一帧 方法: 我相信我不需要使用InitUnderortyMap然后重新映射,而是可以使用UnderortPoints。我认为不失真点不失真感兴趣的点并纠正它们 三、 我第二次做什么 如果我的信念不正确,你可以忽略这一点OpenCV的不失真点是否也能纠正它们?,opencv,calibration,Opencv,Calibration,我试图通过使用带有两个摄像头的OpenCV 2.3.1来确定两个对象之间的距离,但无法计算对象的objectPoints OCV 2.3.1、MSVC++、Windows 7。我认为这是因为在计算视差之前,图像点没有被校正 我先做什么 第一步。自行校准每个摄像头 二,。我所相信的 目标: 我正在尝试不失真并校正来自1号摄像机和2号摄像机的图像中一个物体的图像点。我做了两次这个过程:一次是当泥鸽在发射器上时,一次是在泥鸽解体前的一帧 方法: 我相信我不需要使用InitUnderortyMap然后重
undistortPoints(launcherC1, launcherC1Undistorted, cameraMatrixC1, distCoeffsC1, R1, P1);
undistortPoints(launcherC2, launcherC2Undistorted, cameraMatrixC2, distCoeffsC2, R2, P2);
undistortPoints(clayPigeonC1, clayPigeonC1Undistorted, cameraMatrix1, distCoeffs1, R1, P1);
undistortPoints(clayPigeonC2, clayPigeonC2Undistorted, cameraMatrix2, distCoeffs2, R2, P2);
不失真点launcherC1,LauncherC1Under失真。。。ClaypegeC2、ClaypegeC2未失真是Point2f对象的向量
四、 信仰与现实的差异
运行所有无畸变点函数后
LauncherC1Undersorted.y不等于LauncherC2Undersorted.y
ClaypegeC1未变形.y不等于ClaypegeC2未变形.y。
它们的差异高达30%
五、问题
Q1除了使其不失真外,不失真点是否也会校正点?
Q1.1_是的。校正后y的值是否应该相等?
Q1.1.1_是的,你能从我包含的代码中看出我做错了什么,这样他们就不会做错了吗?
Q1\否如果无畸变点不校正点,那么我如何校正它们?
“无畸变点”无法校正点,因为您从未为其提供校正所需的参数-这是摄影机与其他摄影机的姿势关系。
当您以正确的方式进行校正时,stereoCalibrate+InitUndistortionRectiveyMap+remap,然后是-对应点的y值将相同。
“无畸变点”无法校正点,因为您从未为其提供校正所需的参数-这是摄影机与其他摄影机的姿势关系。
当您以正确的方式进行校正时,stereoCalibrate+InitUndistortionRectiveyMap+remap,然后是-对应点的y值将相同。
这是一个很长的问题。如果你想最大限度地增加能够通读到最后的人数,我建议将其编辑到最低限度-除了消除他们的干扰之外,还需要询问“不失真点是否也会纠正点?”并可能进行最低限度的进一步描述。另外,你能确认你有吗?这是一个很长的问题。如果你想最大限度地增加能够通读到最后的人数,我建议将其编辑到最低限度-除了消除他们的干扰之外,还需要询问“不失真点是否也会纠正点?”并可能进行最低限度的进一步描述。另外,你能确认你有吗?
int numCornersHor = 4;
int numCornersVer = 3;
const float squareSize = 1.75;
Size imageSize = Size(numCornersHor, numCornersVer);
int numSquares = numCornersHor * numCornersVer;
for(int i = 0; i < pairs; i++ )
{
for( int j = 0; j < imageSize.height; j++ )
{
for( int k = 0; k < imageSize.width; k++ )
{
objectPoints[i].push_back(Point3f(j*squareSize, k*squareSize, 0));
}
}
}
Mat R, T, E, F;
rms = stereoCalibrate( objectPoints,
imagePoints[0], imagePoints[1],
cameraMatrix[0], distCoeffs[0],
cameraMatrix[1], distCoeffs[1],
imageSize,
R, T, E, F,
TermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 100, 1e-5),
CV_CALIB_FIX_ASPECT_RATIO +
CV_CALIB_ZERO_TANGENT_DIST +
CV_CALIB_SAME_FOCAL_LENGTH +
CV_CALIB_RATIONAL_MODEL +
CV_CALIB_FIX_K3 + CV_CALIB_FIX_K4 + CV_CALIB_FIX_K5
);
stereoRectify(
cameraMatrix[0], cameraMatrix[1],
distCoeffs[0], distCoeffs[1],
imageSize,
R, T,
RC1, RC2, //RC1: Rotation matrix Camera 1
PC1, PC2,
Q,
CALIB_ZERO_DISPARITY,
1,
imageSize);
undistortPoints(launcherC1, launcherC1Undistorted, cameraMatrixC1, distCoeffsC1, R1, P1);
undistortPoints(launcherC2, launcherC2Undistorted, cameraMatrixC2, distCoeffsC2, R2, P2);
undistortPoints(clayPigeonC1, clayPigeonC1Undistorted, cameraMatrix1, distCoeffs1, R1, P1);
undistortPoints(clayPigeonC2, clayPigeonC2Undistorted, cameraMatrix2, distCoeffs2, R2, P2);