1

opencv を使用してカメラを調整しようとしています。このチュートリアルを見つけましたが、「エラー ベクターの反復子に互換性がありません」という例外が発生しています。

次のように image_points を宣言しました。

vector<vector<Point2f>> image_points;

コーナーは次のとおりです。

vector<Point2f> corners;

次の 3 つの OpenCV 呼び出しでコーナーを使用しました。

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

次のように image_points のコーナーをプッシュしようとすると、例外が発生しました。

if ( key == ' ' && found != 0 )
    image_points.push_back(corners);

誰が何が間違っているかを示唆できますか?

編集:完全なコードを投稿する

#include <opencv\cv.h>
#include <opencv\highgui.h>

using namespace cv;
using namespace std;

int main()
{
    int numBoards = 3;
    int numCornersHor = 9;
    int numCornersVer = 6;

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

    VideoCapture capture = VideoCapture(0);

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

    vector<Point2f> corners;
    int successes=0;

    Mat image;
    Mat gray_image;
    capture >> image;

    vector<Point3f> obj;
    for(int j=0;j<numSquares;j++)
        obj.push_back( Point3f( (j * 1.0f) / numCornersHor, ( j % numCornersHor ) * 1.0f, 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("win2", gray_image);

        capture >> image;

        int key = waitKey(1);
        if(key==27)
            return 0;

        if(key==' ' && found!=0)
        {
            // the next line throws the exception.
            image_points.push_back(corners);
            object_points.push_back(obj);
            printf("Snap stored!\n");

            successes++;

            if(successes>=numBoards)
                break;
        }
    }
    // the program never reaches this point

    // do more stuff .....
}    

以下は、私が経験している例外です。 例外が発生しました

4

0 に答える 0