中止陷阱:6个具有findChessboardCorners的陷阱

时间:2019-03-22 18:26:54

标签: c++ opencv camera calibration digital

我是这个论坛的新手。我想问你一个问题,这一天一直困扰着我。问题是我在互联网上找不到任何东西。在大学里,我们必须这样做: 编写一个程序,该程序: -加载棋盘图像。 (这些想象物在教授提供的文件夹中,代表了华为棋盘智能手机拍摄的一些照片(15))。 -检测每个图像中的棋盘交点。您需要的OpenCV函数为cv::findChessboardCorners()(可选:考虑使用cv::cornerSubPix()函数完善角点检测)。

我正在Macbook上用Xcode(c ++)和opencv 3.4.5编写它。

问题是在指令findChessboardCorners上出现错误。

我真的不知道是什么原因造成的,问题是“中止陷阱:6.有人可以帮我吗?

非常感谢您。

#include < sstream >
#include < iostream >
#include < opencv2 / core.hpp > 
#include < opencv2 / calib3d / calib3d.hpp > 
#include < opencv2 / highgui.hpp > 
#include < opencv2 / imgproc.hpp >

#define points_per_row 12# define points_per_colum 8
using namespace cv;
using namespace std;

int main(int argc,
  const char * argv[]) {
  //read the file
  stringstream sst;
  vector < Mat > imagesArray;
  vector < Point2f > centers; //this will be filled by the detected centers
  Size patternSize = Size(11, 7); //2nd parameter FindchessCorners
  bool patternfound = false; //result of findChessboardCorners

  cout << "flag1 " << endl;
  for (int i = 1; i < 16; i++) {
    sst << "img" << i << ".jpg";
    cout << sst.str() << endl;
    imagesArray.push_back(imread(sst.str())); // putting into an array
    cout << "flag2" << endl;
  } //for
  //PUNTO 2: individuation of the corners of every image
  for (int i = 0; i <= 15; i++) {
    cout << "flag3" << endl;
    patternfound = findChessboardCorners(imagesArray[i], patternSize, centers);
    if (patternfound) {
      cout << "pattern found:" << patternSize << endl;
      cout << "centroids: " << centers << endl;
      cout << "centroids array size: " << centers.size() << endl;
      for (int j = 0; j < centers.size(); j++)
        cout << centers[j] << endl;
    }
  } //for

  return 0;
}

1 个答案:

答案 0 :(得分:0)

我已经解决了!问题是图像的路径,更具体地说,我没有在每个周期都重置sset,并且从第二个周期开始,该路径还存储了前一个的路径。

相关问题