使用getoptiamlnewcameramatrix恢复所有原始图像

时间:2018-03-08 04:49:39

标签: opencv camera-calibration

enter image description here

这是我的程序输出 这是我扭曲的形象enter image description here

为了获得原始图像的整个像素,我使用了getoptimalnewcameramatrix,但输出很糟糕,我的intrix和distcoffes是完全正确的。 这是我的程序

Mat src = imread("E:\\40_office\\distorted_bot\\0.jpg");
    Size newsize(2280,3072);
    cout << src.rows;
    namedWindow("", WINDOW_AUTOSIZE);
    imshow("", src);
    waitKey();
    Mat mapx,mapy;//size(x,y)

    Mat cameraMatrix = (Mat_<double>(3, 3) << 1224.1, 0, 761.7497, 0, 1209.8, 1043.6, 0, 0, 1);
    //Mat cameraMatrix = (Mat_<double>(3, 3) << 1224.1, 0, 1141.7497, 0, 1209.8, 1442.6, 0, 0, 1);
    //Mat cameraMatrix = (Mat_<double>(3, 3) << 1209.8, 0, 1043.6, 0, 1224.1, 761.7497, 0, 0, 1);
    Mat distCoeffs = (Mat_<double>(5, 1) << -0.3649, 0.1451, -0.0273, -0.000035214,0.0012);
    double alpha = 1;
    Mat newcameramatrix = getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, src.size(), alpha, newsize,0);
    cout << newcameramatrix<<"src.size"<<src.size();
    fisheye::initUndistortRectifyMap(cameraMatrix, distCoeffs,Mat(), newcameramatrix ,newsize, CV_16SC2, mapx,mapy);

    Mat newimage=Mat(newsize,CV_8UC3);

        remap(src, newimage, mapx, mapy, INTER_LINEAR);
        imwrite("C:\\Users\\wk\\Desktop\\1_cali100.jpg", newimage);

    return;

0 个答案:

没有答案