/************OpenCV4.3 Version*******************************/
for (int i = 1; i <= 18; i++)
{
string filename = "D:/test1/" + to_string(i) + ".bmp";
Mat image = imread(filename);
vector<Point2f> corners;
Mat imageGray;
cvtColor(image, imageGray, COLOR_BGR2GRAY);
bool found;
// 棋盘内部角点的数量
cv::Size boardSize(7, 3);
found = findChessboardCornersSB(image, boardSize, corners, CALIB_CB_EXHAUSTIVE | CALIB_CB_ACCURACY);
std::vector<vector<Point2f>> image_points;
std::vector<vector<Point3f>> object_points;
float square_size = 30;
if (found)
{
drawChessboardCorners(image, boardSize, Mat(corners), found);
vector< Point3f > obj;
for (int i = 0; i < boardSize.height; i++)
for (int j = 0; j < boardSize.width; j++)
obj.push_back(Point3f((float)j * square_size, (float)i * square_size, 0));
if (found)
{
cout << i << ". Found corners!" << endl;
image_points.push_back(corners);
object_points.push_back(obj);
}
}
cv::imshow("image", image);
cv::waitKey(0);
}
/***************opencv3.4 Version*******************************/
for (int i = 1; i <= 18; i++)
{
string filename = "D:/test1/" + to_string(i) + ".bmp";
Mat image = imread(filename);
vector<Point2f> corners;
Mat imageGray;
cvtColor(image, imageGray, COLOR_BGR2GRAY);
bool found;
// 棋盘内部角点的数量
cv::Size boardSize(7, 3);
found = findChessboardCorners(image, boardSize, corners);
if (found)
{
//亚像素点检测
cornerSubPix(imageGray, corners, Size(5, 5),
Size(-1, -1), TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 30, 0.1));
drawChessboardCorners(image, boardSize, Mat(corners), found);
vector< Point3f > obj;
float square_size = 30;
std::vector<vector<Point2f>> image_points;
std::vector<vector<Point3f>> object_points;
for (int i = 0; i < boardSize.height; i++)
for (int j = 0; j < boardSize.width; j++)
obj.push_back(Point3f((float)j * square_size, (float)i * square_size, 0));
if (found)
{
cout << i << ". Found corners!" << endl;
image_points.push_back(corners);
object_points.push_back(obj);
}
}
cv::imshow("image", image);
cv::waitKey(0);
}
return 0;