Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV的不失真点是否也能纠正它们?_Opencv_Calibration - Fatal编程技术网

OpenCV的不失真点是否也能纠正它们?

OpenCV的不失真点是否也能纠正它们?,opencv,calibration,Opencv,Calibration,我试图通过使用带有两个摄像头的OpenCV 2.3.1来确定两个对象之间的距离,但无法计算对象的objectPoints OCV 2.3.1、MSVC++、Windows 7。我认为这是因为在计算视差之前,图像点没有被校正 我先做什么 第一步。自行校准每个摄像头 二,。我所相信的 目标: 我正在尝试不失真并校正来自1号摄像机和2号摄像机的图像中一个物体的图像点。我做了两次这个过程:一次是当泥鸽在发射器上时,一次是在泥鸽解体前的一帧 方法: 我相信我不需要使用InitUnderortyMap然后重

我试图通过使用带有两个摄像头的OpenCV 2.3.1来确定两个对象之间的距离,但无法计算对象的objectPoints OCV 2.3.1、MSVC++、Windows 7。我认为这是因为在计算视差之前,图像点没有被校正

我先做什么

第一步。自行校准每个摄像头

二,。我所相信的

目标: 我正在尝试不失真并校正来自1号摄像机和2号摄像机的图像中一个物体的图像点。我做了两次这个过程:一次是当泥鸽在发射器上时,一次是在泥鸽解体前的一帧

方法: 我相信我不需要使用InitUnderortyMap然后重新映射,而是可以使用UnderortPoints。我认为不失真点不失真感兴趣的点并纠正它们

三、 我第二次做什么

如果我的信念不正确,你可以忽略这一点

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);