1

определение calibrateCamera является: CV_EXPORTS_W двойной calibrateCamera (InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Размер IMAGESIZE, InputOutputArray cameraMatrix, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags = 0, Критерии TermCriteria = TermCriteria (TermCriteria :: COUNT + TermCriteria :: EPS, 30, DBL_EPSILON));Как сделать calibrateCamera вернуть всего лишь 4 distCoeffs

некоторые эти Титулы:

@param distCoeffs Выходной вектор коэффициентов искажения \ F $ (k_1, k_2, p_1, p_2 [, K_3 [, k_4, k_5, k_6], [s_1, s_2, S_3 , s_4]]) \ f $ из 4, 5, 8 или 12 элементов.

@param флаги Различные флаги, которые могут быть равны нулю или сочетание следующих значений: - CV_CALIB_RATIONAL_MODEL Коэффициенты k4, k5 и k6 включены. Чтобы обеспечить обратную совместимость, этот дополнительный флаг должен быть явно указан, чтобы заставить функцию калибровки использовать рациональную модель и вернуть 8 коэффициентов. Если флаг не установлен, функция вычисляет и возвращает только 5 коэффициентов искажения.

Как мы видим, fuction calibrateCamera (...) возвращает 5 * 1 distCoeffs Mat, но из-за k_3 это будет слишком много, мне действительно не нужно k_3, как если бы k_3 использовался для Fisheye Lens , и cvCalibrateCamera2 (...) просто верните 4 * 1 distCoeffs Mat

, так что я могу сделать, чтобы справиться с calibrateCamera? Я много ищу, но у меня нет идей.

1.jpg

1undistort.jpg

ответ

0

Вы можете установить флаг резюме :: CALIB_FIX_K3. Вот disCoeffs с и без этого флага, вычисленного в моем тесте.

{0.456533, 0.377582, 0.0250243, -0.0100882, 0} 
{0.425909, 0.169672, 0.0236827, -0.00983692, 0.249512} 

Но результат неискаженного изображения в моем тесте не имеет никакого значения.