我是这个论坛的新手。我想问你一个问题,这一天一直困扰着我。问题是我在互联网上找不到任何东西。在大学里,我们必须这样做:
编写一个程序,该程序:
-加载棋盘图像。 (这些想象物在教授提供的文件夹中,代表了华为棋盘智能手机拍摄的一些照片(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;
}
答案 0 :(得分:0)
我已经解决了!问题是图像的路径,更具体地说,我没有在每个周期都重置sset,并且从第二个周期开始,该路径还存储了前一个的路径。