cámara de calibración opencv

Hola estoy haciendo un proyecto para hacer una imagen de reconstrucción 3d. Soy la fase de calibración de la cámara, que lleva mucho tiempo. Pero cuando compilo el código y muestro el tablero de ajedrez frente a la cámara, se dirige directamente al error de excepción no manejado.

Cuando la imagen no está en el cuadro, no se produce ningún error tan pronto como entra en el cuadro, se produce un error no manejado, no sé por qué.

Le he preguntado a mucha gente, ningún cuerpo parece ayudar.

aqui esta mi codigo

#include <cv.h>
#include <highgui.h>
#include <vector>
#include <stdlib.h>
#include <stdio.h>

using namespace cv;
using namespace std;

int main()
{
    int numBoards = 0;
    int numCornersHor;
    int numCornersVer;

    printf("Enter number of corners along width: ");
    scanf("%d", &numCornersHor);

    printf("Enter number of corners along height: ");
    scanf("%d", &numCornersVer);

    printf("Enter number of boards: ");
    scanf("%d", &numBoards);

    int numSquares = numCornersHor * numCornersVer;
    Size board_sz = Size(numCornersHor, numCornersVer);
    VideoCapture capture = VideoCapture(0);

    vector<vector<Point3d>> object_points;
    vector<vector<Point2d>> image_points;

    vector<Point2d> corners;
    int successes=0;

    Mat image;
    Mat gray_image;
    capture >> image;

    vector<Point3d> obj;
    for(int j=0;j<numSquares;j++)
        obj.push_back(Point3d(j/numCornersHor, j%numCornersHor, 0.0f));

    while(successes<numBoards)
    {
        cvtColor(image, gray_image, CV_BGR2GRAY);

        bool found = findChessboardCorners(image, board_sz, corners, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);

        if(found)
        {
            cornerSubPix(gray_image, corners, Size(11, 11), Size(-1, -1), TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 30, 0.1));
            drawChessboardCorners(gray_image, board_sz, corners, found);
        }

        imshow("win1", image);
        imshow("win2", gray_image);

        capture >> image;

        int key = waitKey(1);

        if(key==27)
            return 0;

        if(key==' ' && found!=0)
        {
            image_points.push_back(corners);
            object_points.push_back(obj);
            printf("Snap stored!\n");

            successes++;

            if(successes>=numBoards)
                break;
        }
    }

    Mat intrinsic = Mat(3, 3, CV_32FC1);
    Mat distCoeffs;
    vector<Mat> rvecs;
    vector<Mat> tvecs;

    intrinsic.ptr<float>(0)[0] = 1;
    intrinsic.ptr<float>(1)[1] = 1;

    calibrateCamera(object_points, image_points, image.size(), intrinsic, distCoeffs, rvecs, tvecs);

    Mat imageUndistorted;
    while(1)
    {
        capture >> image;
        undistort(image, imageUndistorted, intrinsic, distCoeffs);

        imshow("win1", image);
        imshow("win2", imageUndistorted);

        waitKey(1);
    }

    capture.release();

    return 0;
}

el error que recibo en la consola es

OpenCV ERROR: Falló la aserción (ncorners> = 0 && corners.depth () == CV_32F) en el archivo de función desconocida, archivo ..... \ src \ opencv \ modules \ imgproc \ src \ cornersubpix.cpp, línea 257.

y el diálogo de error dice

Excepción no controlada en 0x769afc16 en basiccalibration.exe: Excepción de Microsoft C ++: cv :: Excepción en la ubicación de memoria 0x0021f51c ..

La ayuda sería apreciada. Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta