首页 > > > Qt 中的vector类
基于Qt框架在做双摄像头的立体视觉重建,程序在VS 2013的Win32 Console运行没有问题,我最近在移植到Qt中就有问题。先上一下相关部分的程序:
相关变量在MainWindow的私有员中定义
1 //初始化标定变量
2 cv::Mat cameraMatLeft, cameraMatRight, distCoeffLeft, \
3 distCoeffRight, R, T, R1, P1, R2, P2;
4 vector<cv::Mat> rvecs, tvecs; double rmsLeft, rmsRight, rmsStereo;
5 cv::Size boardSize, imageSize; vector<cv::Point3f> corners;
6 vector<vector<cv::Point2f>> imagePointsLeft, imagePointsRight;
7 vector<vector<cv::Point3f>> objectPoints;然后是出问题的标定函数函数体部分:
1 void MainWindow::calibrate(cv::Mat& cameraMat, cv::Mat& distCoeff, \
2 vector<vector<cv::Point2f>>& imagePoints,
3 const int nImages, const QStringList fileList,
4 double& rms)
5 {
6 cv::Mat view, viewGray;
7 vector<cv::Point2f> pointBuf;
8 for(int i = 0; i < nImages; i++)
9 {
10 view = cv::imread(fileList.at(i).toStdString(), 1);
11 cv::cvtColor(view, viewGray, cv::COLOR_BGR2GRAY);
12 bool found = cv::findChessboardCorners(view, boardSize, pointBuf, \
13 CV_CALIB_CB_ADAPTIVE_THRESH | \
14 CV_CALIB_CB_FAST_CHECK | \
15 CV_CALIB_CB_NORMALIZE_IMAGE);
16 if(found)
17 {
18 cv::cornerSubPix(viewGray, pointBuf, cv::Size(11, 11), cv::Size(-1, -1), \
19 cv::TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
20 imagePoints.push_back(pointBuf);
21 }
22 }
23
24 objectPoints.resize(imagePoints.size(), corners);
25 rms = cv::calibrateCamera(objectPoints, imagePoints, imageSize, cameraMat, \
26 distCoeff, rvecs, tvecs);
27 }标定函数的调用过程:
1 corners.resize(1);
2 for(int i = 0; i < w; i++)
3 {
4 for(int j = 0; j < h; j++)
5 {
6 corners.push_back(cv::Point3f(j*squareSize, i*squareSize, 0));
7 }
8 }
9
10 //标定
11 calibrate(cameraMatLeft, distCoeffLeft, imagePointsLeft, nLeftImages, \
12 leftFilelist, rmsLeft);我调试发现是执行到这一步出了问题:
imagePoints.push_back(pointBuf);然后执行到这一步显示这样的信息

然后程序跳到这里vector文件的这里
__declspec(noreturn) void _Xlen() const
{ // report a length_error
_Xlength_error("vector<T> too long");
}OS : win 10 64bit
Qt Vision: 5.6 + msvc 2012 32-bit
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/758/viewspace-3145500/ ,如需转载,请注明出处,否则将追究法律责任。