Ich versuche eine Kamerakalibrierung mit einem Gitter aus Kreisen durchzuführen. Ich bin nicht erfolgreich gewesen, weil findCirclesGrid
immer false auch mit einer Datei zurückgibt, die nichts als ein Gitter der Kreise ist. Ich habe es eingekocht zu diesem einfachen Programm:OpenCVs findCirclesGrid findet kein Gitter aus Kreisen
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/calib3d.hpp"
using namespace std;
using namespace cv;
int main(int argc, char *argv[]) {
Mat image;
// read an image
if (argc < 2)
image = imread("circleGridSmall.jpg");
else
image = imread(argv[1]);
if (!image.data) {
cout << "Image file not found\n";
return 1;
}
imshow("image", image);
waitKey(0);
bool found;
vector<Point2f> pointbuf;
found = findCirclesGrid(image, Size(8, 12), pointbuf);
printf("found: %d\n", found);
return 0;
}
Und dieses einfache Bild:
Auch mit diesem, findCirclesGrid
false zurück. Was vermisse ich?
Das ist die Ursache für dieses Bild, aber leider ist das nicht das einzige Problem. Mein Originalbild ist 3264 x 2448. Ich habe es für diesen Beitrag geschrumpft. 'findCirclesGrid' findet die Kreise im Bild in voller Größe nicht. Als Test nannte ich 'findCirclesGrid' auf meinen Fotos, nachdem ich sie um 75% reduziert hatte und die Kreise gefunden hatte. Es gibt also scheinbar undokumentierte maximale Bildgröße, mit denen es arbeiten wird oder es ist nur ein Fehler. – SSteve
Ich habe einige Tests gemacht und sobald das Bild auf 2448 x 1836 kam, konnte 'findCirclesGrid' keine Kreise finden. – SSteve