Ловушка отмены: 6 с findChessboardCorners - PullRequest
0 голосов
/ 22 марта 2019

Я новичок на этом форуме.Я хотел бы задать вам вопрос, который раздражал меня весь этот день.проблема в том, что я ничего не нахожу в интернете по этому поводу.В университете мы должны сделать следующее: написать программу, которая: - загружает изображения шахматной доски.(эти изображения находятся в папке, предоставленной профессором, они представляют некоторые фотографии (15), сделанные на смартфоне шахматной доски Huawei).-Определяет пересечения шахматной доски в каждом изображении.Вам нужна функция OpenCV cv::findChessboardCorners() (необязательно: рассмотрите возможность использования функции cv::cornerSubPix() для уточнения угловых обнаружений).

Я пишу ее с помощью Xcode (c ++) с opencv 3.4.5 наMacbook.

Проблема в том, что по инструкции 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 голосов
/ 29 марта 2019

Я решил это! проблема была в пути к изображению, если быть более точным, я не сбрасывал sset при каждом цикле, и во втором цикле путь сохранял также путь предыдущих.

...