как получить все неискаженное изображение с помощью opencv

Я не пою cv::undistort, но изображение обрезается. Я хотел бы иметь все неискаженное изображение, чтобы неискаженный размер был больше исходного, например:

введите здесь описание изображения

Я думаю, что мне нужно использовать cv::getOptimalNewCameraMatrix, но мне не повезло с моими испытаниями.. какая-то помощь?


person nkint    schedule 11.09.2013    source источник
comment
попробуйте это ipwithopencv.blogspot.ro/2010/01/thin- пластина-сплайн-example.html   -  person user2727765    schedule 11.09.2013


Ответы (3)


Просто для протокола: вы должны использовать cv::getOptimalNewCameraMatrix и установите для параметра альфа значение 1. Альфа 0 показывает только действительные точки на изображении, альфа 1 показывает все исходные точки, а также черные области. cv::getOptimalNewCameraMatrix также дает вам ROI для обрезки результата cv::undistort.

person Josep Bosch    schedule 20.11.2013

Этот код сделает свое дело:

void loadUndistortedImage(std::string fileName, Mat & outputImage, 
    Mat & cameraMatrix, Mat & distCoeffs) {

    Mat image = imread(fileName, CV_LOAD_IMAGE_GRAYSCALE);

    // setup enlargement and offset for new image
    double y_shift = 60;
    double x_shift = 70;
    Size imageSize = image.size();
    imageSize.height += 2*y_shift;
    imageSize.width += 2*x_shift;

    // create a new camera matrix with the principal point 
    // offest according to the offset above
    Mat newCameraMatrix = cameraMatrix.clone();
    newCameraMatrix.at<double>(0, 2) += x_shift; //adjust c_x by x_shift
    newCameraMatrix.at<double>(1, 2) += y_shift; //adjust c_y by y_shift

    // create undistortion maps
    Mat map1;
    Mat map2;
    initUndistortRectifyMap(cameraMatrix, distCoeffs, Mat(), 
        newCameraMatrix, imageSize, CV_16SC2, map1, map2);

    //remap
    remap(image, outputImage, map1, map2, INTER_LINEAR);
}

См. http://docs.opencv.org/2.4/modules/calib3d/doc/camera_dication_and_3d_reconstruction.html и http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html

person andrewmkeller    schedule 19.03.2016

лучше всего было бы создать подкласс класса OpenCV и перегрузить метод undistort(), чтобы получить доступ ко всем нужным вам изображениям.

person madduci    schedule 15.10.2013