Загрузка матрицы камеры и коэффициентов искажения
Я пытаюсь откалибровать камеру для оценки положения головы, используя маркеры AruCo. Я попытался выполнить калибровку с помощью библиотеки OpenCV в C++, но безуспешно, поэтому я откалибровал свою камеру, используя набор инструментов для калибровки камеры MATLAB, и мой код для обнаружения маркера AruCo находится в C++, который требует матрицы камеры и коэффициентов искажения в качестве аргументов. Моя проблема заключается в том, как загрузить эти аргументы в функцию обнаружения маркера. Я попытался сохранить матрицу камеры и коэффициенты искажения в массивах, и это показывает мне ошибку "аргумент типа int* несовместим с параметром типа int". Часть кода, отвечающая за обнаружение маркера, выглядит следующим образом.
using namespace std;
using namespace cv;
int cameraMatrix[] = { 4.499, 0, 1.827, 0, 4.485, 0.97, 0, 0, 1 };
int distanceCoefficients[] = { 0.20255, -0.45448, -0.00117, 0.00241, 0 };
int startWebcamMonitoring(const int cameraMatrix, const int
distanceCoefficients, float arucoSquareDimensions)
{
Mat frame, Croppedframe;
vector<int> markerIds;
vector < vector<Point2f>> markerCorners, rejectedCandidates;
aruco::DetectorParameters parameters;
Ptr<aruco::Dictionary> makerDiktionary =
aruco:: getPredefinedDictionary (aruco:: PREDEFINED_DICTIONARY_NAME:: DICT_4X4_50);
VideoCapture vid(0);
if (!vid.isOpened())
{
return -1;
}
//namedWindow("Webcam", CV_WINDOW_AUTOSIZE);
vid.set(CAP_PROP_FRAME_WIDTH, 3840);
vid.set(CAP_PROP_FRAME_HEIGHT, 2160);
vector<Vec3d> rotationVectors, translationVectors;
while (true)
{
vid >> frame;
Croppedframe = frame(cv::Rect(1500, 850, 1250, 1250));
if (!vid.read(frame))
break;
aruco::detectMarkers(Croppedframe, makerDiktionary, markerCorners, markerIds);
aruco::estimatePoseSingleMarkers(markerCorners, arucoSquareDimension, cameraMatrix, distanceCoefficients, rotationVectors, translationVectors);
for (int i = 0; i < markerIds.size(); i++)
{
aruco::drawAxis(Croppedframe, cameraMatrix, distanceCoefficients, rotationVectors[i], translationVectors[i], 0.1f);
cout << translationVectors[i] << "translation" << "vector" << markerIds[i] << endl;
markerIds[i] << endl;
}
imshow("Cropped Webcam", Croppedframe);
//imshow("Webcam", frame);
if (waitKey(30) >= 0) break;
}
return 1;
}
int main(int argv, char** argc)
{
startWebcamMonitoring(cameraMatrix, distanceCoefficients, 0.01f);
return 0;
}