findChessboardCorners nie działa dla obrazu kalibracyjnego

Staram się, aby OpenCV 2.4.5 rozpoznał wzór szachownicy z mojej kamery internetowej. Nie mogłem tego osiągnąć, więc postanowiłem spróbować, aby działało tylko przy użyciu „idealnego” obrazu:

ale nadal nie będzie działać - funkcja patternFound za każdym razem zwraca wartość false. Czy ktoś ma pojęcie, co robię źle?

#include <stdio.h>

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/calib3d/calib3d.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

int main(){
    Size patternsize(8,8); //number of centers
    Mat frame = imread("perfect.png"); //source image
    vector<Point2f> centers; //this will be filled by the detected centers

    bool patternfound = findChessboardCorners(frame,patternsize,centers);

    cout<<patternfound<<endl;
    drawChessboardCorners(frame, patternsize, Mat(centers), patternfound);

    cvNamedWindow("window");
    while(1){
        imshow("window",frame);
        cvWaitKey(33);
    }
}

questionAnswers(3)

yourAnswerToTheQuestion