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 .....
}
以下は、私が経験している例外です。