2016-09-29 5 views
-3

Hier ist mein CodefindChessboardCorners gibt unerwartete Ergebnisse

#include <opencv/cv.h> 
#include <opencv/highgui.h> 
#include<opencv2/opencv.hpp> 

#include<iostream> 
//#include<vector> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    VideoCapture cap = VideoCapture(0); 
    int successes = 0; 

    int numBoards = 0; 
    int numCornersHor = 6; 
    int numCornersVer = 4; 

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



    vector<Point2f> corners; 


    for (;;) 
    { 
     Mat img; 
     cap >> img; 
     Mat gray; 
     cvtColor(img, gray, CV_RGB2GRAY); 
     if (img.empty()) break; // end of video stream 
     imshow("this is you, smile! :)", gray); 
     if (waitKey(1) == 27) break; // stop capturing by pressing ESC 


    bool found = findChessboardCorners(gray, board_sz, corners, CALIB_CB_ADAPTIVE_THRESH); 
    if (found == 1) 
    { 
     cout << corners.size()<<"\n"; 

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

    } 

    cap.release(); 
     waitKey(); 
     return 0; 
    } 

Die Coderahmen von einer Webcam aufzeichnet. Wenn ein Schachbrett entdeckt wird, wird die Gesamtzahl der gefundenen Ecken ausgedruckt (ich habe es gemacht, weil ich nicht die gleiche Ausgabe wie im Tutorialcode erhalten habe und ich wollte herausfinden, wo der Fehler liegt).

Der Ausgang:

+0

AUSGABE SAGT, DASS 11 ZEITECKEN ERKANNT WERDEN, ABER ich weiß nicht, way, dass so viel großer Wert kommt – dhc

+1

was ist mit dem capslock? – slawekwin

+0

Sorry! @slawekwin – dhc

Antwort

1

Zuerst sollten Sie einige Grundregeln folgen:

  1. nicht lose Papiere verwenden -> Druck/kleben Sie das Schachbrett auf einer flachen Platte
  2. Drucken es mit einem großen weißen Rand zur Verbesserung der Erkennung
  3. Das Schachbrett muss vollständig innerhalb des Bildes (nicht wie in Ihrem Beispiel) sein e)
  4. Nehmen Sie mehrere Bilder mit unterschiedlichen Positionen des Schachbretts

Zweitens, man kann Ihre Konturen in ein 8-Bit-Graustufen-Bild zeichnen, statt ein 8-Bit-Farbbild. Und wenn ich richtig zähle (Innenecken zählen) hat dein Schachbrett die Größe (8,6).

0

Ich habe das gleiche Problem, die Nummer corners ist riesig. Nach einigem Suchen fand ich diese Lösung Here. Aus irgendeinem Grund ändert findChessboardCorners Funktion die corners Vektor. Ich versuchte die Lösung oben, es funktionierte gut mit der Ausgabe corners, aber ich habe noch Assertion gescheitert Problem mit cornerSubPix Funktion.

+1

Danke, aber ich löste das Problem durch Einfügen der richtigen Anzahl von Quadraten (sehr dummer Fehler obwohl) und nach dieser EckeSubPix-Funktion funktioniert auch perfekt in Ordnung für mich! Nochmals vielen Dank! :) – dhc

Verwandte Themen