Kamerakalibrierung opencv

Hallo, ich mache ein Projekt, um eine Bild-3D-Rekonstruktion zu machen. Ich bin in der Phase des Kalibrierens der Kamera, was sehr viel Zeit in Anspruch nimmt. Aber wenn ich den Code kompiliere und das Schachbrett vor der Kamera anzeige, geht es direkt zu einem unbehandelten Ausnahmefehler.

Wenn das Bild nicht im Rahmen ist, kein Fehler, sobald es im Rahmen ist, tritt ein nicht behandelter Fehler auf. Ich weiß nicht warum.

Ich habe viele Leute gefragt, kein Körper kann scheinen zu helfen.

Hier ist mein Code

#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;
}

der Fehler, den ich auf der Konsole erhalte, ist

OpenCV-FEHLER: Assertion fehlgeschlagen (ncorners> = 0 && corners.depth () == CV_32F) in unbekannter Funktionsdatei, Datei ..... \ src \ opencv \ modules \ imgproc \ src \ cornersubpix.cpp, Zeile 257.

und der Fehlerdialog sagt

Unbehandelte Ausnahme bei 0x769afc16 in basiccalibration.exe: Microsoft C ++ - Ausnahme: cv :: Ausnahme am Speicherort 0x0021f51c ..

Hilfe wäre dankbar. Vielen Dank

Antworten auf die Frage(1)

Ihre Antwort auf die Frage