【发布时间】:2020-03-13 04:45:47
【问题描述】:
我正在尝试校准我的相机。为此,我需要进行一些测试-> findChessboard; 我有真正的国际象棋,我拍了它的照片(它是 8x4),我设置了尺寸(8-1,4-1)->尺寸(7,3) 机器人板设置为 32(因为 4 乘以 8 给我 32(或者我应该写 7*3->21))。当我想找到 ChessBoard 时,它说我是假的;
会有这个棋盘的图片。:
我已经尝试了所有方法来找到 ChessboardCorners->我将其标记为 CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_FILTER_QUADS 或 CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_FILTER_QUADS。它也没有奏效。我试图给它图像彩色(非灰色)图像它也没有用。我该怎么办?
编写我尝试过的代码:
VideoCapture vc(0);
int numBoards = 0;
int numCornersHor;
int numCornersVer;
printf("Enter number of corners along width: ");
scanf("%d", &numCornersHor);
printf("Enter number of corners along height: ");
scanf("%d", &numCornersVer);
printf("Enter number of boards: ");
scanf("%d", &numBoards);
int numSquares = numCornersHor * numCornersVer;
Size board_sz = Size(numCornersHor, numCornersVer);
vector<vector<Point3f>> object_points;
vector<vector<Point2f>> image_points;
vector<Point2f> corners;
int successes = 0;
Mat image;
Mat gray_image;
vc >> image;
for (int j = 0; j < numSquares; j++)
obj.push_back(Point3f(j / numCornersHor, j % numCornersHor, 0.0f));
while (successes < numBoards)
{
if (image.empty())break;
cvtColor(image, gray_image, COLOR_BGR2GRAY);
bool found = findChessboardCorners
(image, board_sz, corners, CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_FILTER_QUADS);
if (found)
{
cornerSubPix(gray_image, corners, Size(11, 11), Size(-1, -1), TermCriteria(TermCriteria::EPS | TermCriteria::MAX_ITER, 30, 0.1));
drawChessboardCorners(gray_image, board_sz, corners, found);
}
imshow("win1", image);
imshow("win2", gray_image);
if (image.empty())break;
vc >> image;
int key = waitKey(1);
if (key == 27)
return 0;
if (key == ' ' && found != 0)
{
image_points.push_back(corners);
object_points.push_back(obj);
printf("Snap stored!");
successes++;
if (successes >= numBoards)
break;
}
}
【问题讨论】:
标签: c++ opencv camera camera-calibration chess