ITPub博客

首页 > > > Qt 中的vector类

Qt 中的vector类

作者:dapan 时间:2019-09-04 15:23:54 0 删除 编辑

基于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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-08-07

  • 博文量
    4504
  • 访问量
    87159