我也在OpenCV论坛上问过这个问题,我在其他地方试试运气.我在Visual Studio Professional 2013中使用OpenCV 3.0.
所以我正在尝试使用calib3d和本教程中的教程代码校准相机.我一遍又一遍地得到同样的错误(std :: length_error在内存位置)并且我已经将它追踪到我尝试的位置并将findChessboardCorners给出的角矢量添加到我代码最后一行的image_points矢量中.
image_points.push_back(corners);
Run Code Online (Sandbox Code Playgroud)
在调试窗口中,角的大小列为:角{size = 2305843009213050645},这显然太大了(我正在使用的校准图像中只有35个角).
剥离教程代码如下,但我再次将问题隔离到findChessboardCorners给出一个看似无意义的角矢量.奇怪的是,在我正在使用的校准图像上绘制角落没有问题 - 看起来好像校准了角落.那么这里的问题是什么?我真的不知道为什么findChessboardCorners会给我这么大的角矢量,我甚至无法将它添加到矢量列表中.
using namespace cv;
using namespace std;
int main(int argc, char** argv){
int numBoards = 1;
int numCornersHor=7;
int numCornersVer=5;
int numSquares = numCornersHor * numCornersVer;
Size board_sz = Size(numCornersHor, numCornersVer);
vector<vector<Point3f>> object_points;
vector<vector<Point2f>> image_points;
vector<Point2f> corners;
int successes = 0;
Mat large_image;
Mat image;
Mat gray_image;
large_image = imread(argv[1], IMREAD_COLOR);
resize(large_image, image, Size(), .5, .5);
vector<Point3f> obj;
for (int j = 0; j<numSquares; …Run Code Online (Sandbox Code Playgroud)