Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8640131
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 12, 20262026-06-12T11:12:16+00:00 2026-06-12T11:12:16+00:00

I have the following problem: Everything works fine, but when i reach the calibrateCamera

  • 0

I have the following problem: Everything works fine, but when i reach the calibrateCamera Part i get the following error:

OpenCV Error: Assertion failed (ni > 0 && ni == ni1) in unknown function, file .
…..\src\opencv\modules\calib3d\src\calibration.cpp, line 3197

I am new here, and maybe my code isn’t as clear as it could be, but please be friendly.
Thank you very much in advance.

My code is: (i deleted the include and pragma parts, because it got really big letters here)

int _tmain()
{


printf("Everything loaded. Press Enter to continue.\n\a");


getch();

system("cls");                              //bildschirm clearen


int numBoards = 0;
int numCornersHor;
int numCornersVer;
char stCurPath[200];
int numFiles = 0;
char stRemFileNum[200];

int curNum;

vector<string> file_names;
string s;
bool pathok = false;

#pragma region ask user for path to load images and list them

//                                                  ask user for path to load images and list them                      




while(pathok == false)
{
fflush(stdin);
printf("Enter path to the folder where the pictures are:\n");
scanf("%199[^\n]s", stCurPath);  //achtung wegen bufferoverflow - nicht mehr als 199 zeichen + EOF (0) einlesen.
                                 //[^\n] wegen Leerzeichen. scanf liest bis Enter.
system("cls");

DIR *dir;
struct dirent *ent;
dir = opendir (stCurPath);




if (dir != NULL) {
/* print all the files and directories within directory */
    printf("Your chosen path:\n%s\n\nFiletree of this path:\n", stCurPath);
    while ((ent = readdir (dir)) != NULL)
    {
        numFiles++; //Anzahl der Files
        printf ("%d)\t%s\n",numFiles, ent->d_name);
        s = ent->d_name;
        file_names.push_back(s);
    }
    closedir (dir);

    fflush( stdout );
    printf ("\nNumber of found files: %d\n", numFiles);

    pathok = true;
} 
else
{
    /* could not open directory */

    printf ("Could not open directory. Make sure path is ok!\n\n");
    pathok = false;

    /*perror ("");
    return EXIT_FAILURE*/;
}
}//while(pathok == false)
/*****************************end ask user for path to load images and list them****************************************/

#pragma endregion

#pragma region ask user to exclude some files

/*****************************************ask user to exclude some files*************************/
printf ("\nEnter the number of the files you dont want to load (number only!).\nSeperate single files with comma.\nEnter 0 if you don't want to exclude files.\nEnter x to exclude all non bmp files.\n\nNumbers:\n");
scanf("%199s", stRemFileNum);       //achtung wegen bufferoverflow - nicht mehr als 199 zeichen + EOF (0) einlesen
vector<string>::iterator it; 
if(strcmp(stRemFileNum,"x") == 0)
{
    curNum=1;
    numFiles = 0;
    string extstr;
    const char * extc;

    file_names.erase(remove_if(file_names.begin(),
                               file_names.end(),
                               isBmpExtension), file_names.end());

    system("cls");                      //bildschirm clearen
    printf("New Filetree of this path:\n\n");
    it = file_names.begin();
    for(it; it != file_names.end(); ++it)
    {
        numFiles++;
        printf ("%d)\t%s\n",numFiles, (*it).c_str());           
    }

    printf ("\nNumber of found files: %d\n", numFiles);
}//if(strcmp(stRemFileNum,"x") == 0)


//end user entered x

//start user entered 0

if(strcmp(stRemFileNum,"0") != 0 && strcmp(stRemFileNum,"x") != 0)
{

    //fehler
    numFiles = 0;
    vector<string> numbersVector;
    string strNumbers = stRemFileNum;
    Tokenize(strNumbers, numbersVector, ",");
    sort(numbersVector.begin(), numbersVector.end(), strCompDesc);

    for(it = numbersVector.begin(); it != numbersVector.end(); ++it)
    {
        curNum = atoi((*it).c_str());
        file_names.erase(file_names.begin() + (curNum - 1));
    }


    system("cls");                      //bildschirm clearen
    printf("New Filetree of this path:\n\n");

    //fehler ende

    for(vector<string>::iterator it = file_names.begin(); it != file_names.end(); ++it)
    {
        numFiles++;
        printf ("%d)\t%s\n",numFiles, (*it).c_str());           
    }

    printf ("\nNumber of found files: %d\n", numFiles);

}
//user entered 0
else if(strcmp(stRemFileNum,"0") == 0)
{
    printf ("\nNo files excluded.\n");
}


/*****************end ask user to exclude some files *******************************************/

#pragma endregion

fflush(stdin);
printf("\nEnter number of corners along width: ");
scanf("%d", &numCornersHor);
fflush(stdin);
printf("Enter number of corners along height: ");
scanf("%d", &numCornersVer);





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

vector<vector<Point3f>> object_points;
vector<vector<Point2f>> image_points;

vector<Point2f> corners;
vector<Point3f> obj;

int pictures_done=0;

Mat image;
Mat gray_image;


//Bilder zum persönlichen auswerten anzeigen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//

for(vector<string>::iterator it = file_names.begin(); it != file_names.end(); ++it)
{



printf("\nLoading Picture..\n");

image = imread(string(stCurPath) + "\\" + (*it).c_str()); //als farbe lesen; doppelter backslash o. normaler

//resize(image, image, Size(0,0), 0.5, 0.5, INTER_AREA);

cvtColor(image,gray_image,CV_RGB2GRAY);





for(int j=0;j<numSquares;j++)
{
    obj.push_back(Point3f(j/numCornersHor, j%numCornersHor, 0.0f));
}//for(int j=0;j<numSquares;j++)



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

    cvNamedWindow("win1", 1);
    imshow("win1", gray_image);
    waitKey(30);
    cvMoveWindow("win1",0,0);
    waitKey(30);
    printf("\nPicture loaded.\nPress a to load original, s to store snap and show next picture,");
    printf("\nd to drop snap and show next picture, and f to close the programm\n");

    char key; 
    bool bOriginalDisplayed = false;

    while(1)
    {
        if (cin.rdbuf()->in_avail())
        {
            key = _getch();
        }

        if('a' == key && found!=0)
        {
            if (!bOriginalDisplayed)
            {
                printf("\nLoading original..\n");
                cvNamedWindow("win2", 1);
                cvMoveWindow("win2",0,0);
                imshow("win2", image);                 //oder imshow cvMoveWindow("Smile", 100, 100); 

                bOriginalDisplayed = true;
                waitKey(50);
                printf("\nOriginal loaded.\nPess a again to close original before you continue.\n");
            }
            else
            {
                cvDestroyWindow("win2");
                printf("\nOriginal closed.\n");
                bOriginalDisplayed = false;
            }
        }

        if('s'==key)
        {
            image_points.push_back(corners);
            object_points.push_back(obj);
            printf("\nSnap stored!\n"); 
            pictures_done++;
            found = false;
            break;
        }

        if('d' == key)
        {
            pictures_done++;
            break;
            found = false;
        }

        if('f' == key)
        {
            return 0;
        }

        Sleep(50);
    } //while (1)



} //for(vector<string>::iterator it = file_names.begin(); it != file_names.end(); ++it)


cvDestroyWindow("win1");
waitKey(50);

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;

for(vector<string>::iterator it = file_names.begin(); it != file_names.end(); ++it)
{
printf("\nLoading undistorted Picture..\n");
image = imread(string(stCurPath) + "\\" + (*it).c_str()); //als farbe lesen; doppelter backslash o. normaler    
//resize(image, image, Size(0,0), 0.5, 0.5, INTER_AREA);
cvtColor(image,gray_image,CV_RGB2GRAY);

    cvNamedWindow("win1", 1);
    cvNamedWindow("win2", 1);
    cvMoveWindow("win1",0,0);
    cvMoveWindow("win2",0,0);
    undistort(image, imageUndistorted, intrinsic, distCoeffs);
    imshow("win1", image);
    waitKey(0);
    imshow("win2", imageUndistorted);
    waitKey(30);
    printf("\nPicture loaded. Press s for the next picture or f to exit.");

    char key; 
    bool bOriginalDisplayed = false;

    while(1)
    {
        if (cin.rdbuf()->in_avail())
        {
            key = _getch();
        }

        if('s'==key)
        {
            break;
        }

        if('f' == key)
        {
            return 0;
        }

        Sleep(50);
    } //while (1)



} //for(vector<string>::iterator it = file_names.begin(); it != file_names.end(); ++it)








return 0;

}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-12T11:12:17+00:00Added an answer on June 12, 2026 at 11:12 am

    If found the problem. And me being a good person i came here to post the answer for people having the same issue in the future.

    Solution: Add a obj.clear() into the for function so obj always stays same size when you push back. Like this:

        //Bilder zum persönlichen auswerten anzeigen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    //
    
    for(vector<string>::iterator it = file_names.begin(); it != file_names.end(); ++it)
    {
        printf("\nLoading Picture..\n");
        image = imread(string(stCurPath) + "\\" + (*it).c_str()); //als farbe lesen; doppelter backslash o. normaler
        //resize(image, image, Size(0,0), 0.5, 0.5, INTER_AREA);
        cvtColor(image,gray_image,CV_RGB2GRAY);
    
        obj.clear();
        for(int j=0;j<numSquares;j++)
        {
            obj.push_back(Point3f(j/numCornersHor, j%numCornersHor, 0.0f));
        }//for(int j=0;j<numSquares;j++)
    
        bool found = findChessboardCorners(image, board_sz, corners, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS);
    
        if(found)
    

    Have fun programming. Greets, Escore.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Okay... So, I came across the following problem: I have one table that works
I have a grails application using hibernate .Under grails 1.3.7 everything works properly, but
I have following problem: I have to make a ASP.NET Webapplication with a two-row
I have following problem: I have built a tabbar application with 4 tabs. I
I have following problem, Code: String a=Yeahh, I have no a idea what's happening
Hi i have following Problem. I write a Mediawiki Extension where i need some
I am using GWT/JAVA for development. I have following problem: I want to remove
I have the following problem. I have embedded a map using Google Maps' API.
I have the following problem in Cakephp: I maded a CMS to edit the
I have the following problem, from c++ I send huge string[] to java. huge

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.